Skip to content

morikuni/go-mlang

Repository files navigation

go-mlang

Go Reference

Go library for i18n (multi language message).

Usage

package main

import (
	"fmt"

	"golang.org/x/text/language"

	"github.com/morikuni/go-mlang"
)

var InvalidUserName = mlang.Dict[string]{
	language.English:  "Invalid user name",
	language.Japanese: "ユーザ名が不正です",
}

func InvalidPasswordLength(min, max int) mlang.Message {
	return mlang.Dict[string]{
		language.English:  fmt.Sprintf("Password must be between %d and %d characters long", min, max),
		language.Japanese: fmt.Sprintf("パスワードは%d文字以上%d文字以下である必要があります", min, max),
	}
}

func PenCount(count int) mlang.Message {
	s := mlang.Dict[string]{
		language.Japanese: fmt.Sprintf("%d本のペン", count),
	}

	if count == 1 {
		s[language.English] = "a pen"
	} else {
		s[language.English] = fmt.Sprintf("%d pens", count)
	}

	return s
}

func IHavePen(count int) mlang.Message {
	return mlang.Dict[mlang.Template]{
		language.English:  mlang.NewTemplate("I have %s", PenCount(count)),
		language.Japanese: mlang.NewTemplate("私は%sを持っています", PenCount(count)),
	}
}

func main() {
	fmt.Println(InvalidUserName.MustGet(language.English))
	// Invalid user name
	fmt.Println(InvalidUserName.MustGet(language.Japanese))
	// ユーザ名が不正です

	fmt.Println(InvalidPasswordLength(1, 2).MustGet(language.English))
	// Password must be between 1 and 2 characters long
	fmt.Println(InvalidPasswordLength(1, 2).MustGet(language.Japanese))
	// パスワードは1文字以上2文字以下である必要があります

	fmt.Println(IHavePen(1).MustGet(language.English))
	// I have a pen
	fmt.Println(IHavePen(1).MustGet(language.Japanese))
	// 私は1本のペンを持っています
	fmt.Println(IHavePen(2).MustGet(language.English))
	// I have 2 pens
	fmt.Println(IHavePen(2).MustGet(language.Japanese))
	// 私は2本のペンを持っています
}