Table of Contents
s3ry
s3ryについては次の記事をご覧ください。
Go製S3クライアントS3ry
要はちょっと便利なS3の操作クライアントです
golang.org/x/text/message
Go準標準パッケージ内にある、国際化のためのパッケージです。
こちらを利用した実際のi18n対応を行なっていきたいと思います
message.NewPrinter を利用して、出力を調整していきます 環境変数 LANGを読み取って、"ja_JP.UTF-8"が指定されている場合は日本語 それ以外が指定されている場合は英語で出力する事にします
i18n.goを利用して、こちらに多言語メッセージを作成していきます
package s3ry
import (
"os"
"golang.org/x/text/language"
"golang.org/x/text/message"
)
// i18nPrinter i18n
var i18nPrinter = message.NewPrinter(language.English)
func init() {
if os.Getenv("LANG") != "ja_JP.UTF-8" {
return
}
i18nPrinter = message.NewPrinter(language.Japanese)
message.SetString(language.Japanese,
"Which bucket do you use?",
"どのbucketを利用しますか?")
~ 省略 ~
}
メッセージを出力する側はメッセージをi18nPrinter.Sprintfに変更していきます
// SelectBucketAndRegion get Region and Bucket
func SelectBucketAndRegion() (string, string) {
// for Bucket Search
s3ry := NewS3ry(ApNortheastOne)
// show Bucket List & select
buckets := s3ry.ListBuckets()
selectBucket := s3ry.SelectItem(i18nPrinter.Sprintf("Which bucket do you use?"), buckets)
ctx := context.Background()
// Get bucket's region
region, err := s3manager.GetBucketRegion(ctx, s3ry.Sess, selectBucket, ApNortheastOne)
if err != nil {
awsErrorPrint(err)
}
return region, selectBucket
}
これで ja_JP.UTF-8 がLANGに設定されている場合は、日本語のメッセージに
それ以外は英語で出力される様になりました
実際の修正のPull Requestはこちらです
まとめ
Goでi18n対応行なってみました。
少し煩雑さを感じたので、golang.org/x/text/messageを利用した別の方法や
golang.org/x/text/messageを利用した他の方法を模索してみようと思います
明日のGo2 Advent Calendar 2019は@gureguさんです。ご期待ください!