📚

Go製REST APIの自前i18n対応

に公開1

コード全体

コードはこちら
https://github.com/nishisuke/go-api-i18n

大まかな流れ

  1. HTTPヘッダーのAccept-Languageをパースする
  2. 言語情報をcontext.Contextに格納する
  3. 言語情報によりメッセージを切り替える
  4. 呼び出す

LCID

今回は言語と地域のペアをLCIDという構造体で定義しています
LCIDの厳密な定義はわからないです
https://github.com/nishisuke/go-api-i18n/blob/main/i18n/lcid.go#L20-L23

HTTPヘッダーのAccept-Languageをパースする

MDNでどんな値がAccept-Languageとしてくるか確認しパースします
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language#syntax

https://github.com/nishisuke/go-api-i18n/blob/main/i18n/acceptlang.go#L16-L60

言語情報をcontext.Contextに格納する

特に説明不要かと

https://github.com/nishisuke/go-api-i18n/blob/main/i18n/context.go

言語情報によりメッセージを切り替える

Translatefという関数が言語に対応したメッセージを返す関数です

https://github.com/nishisuke/go-api-i18n/blob/main/i18n/trans.go
https://github.com/nishisuke/go-api-i18n/blob/main/i18n/dict.go

呼び出し

https://github.com/nishisuke/go-api-i18n/blob/main/main.go

curl localhost:8080/greet/nishi // => Hello, nishi!
curl localhost:8080/greet/nishi -H "Accept-Language: ja" // => こんにちは、nishi!

Discussion