TL;DR
インドネシア語はISO639言語コードで表すと"id"だが、go-i18nでは"in"で代用可能
golintに怒られた。
インドネシア語のリソースを追加するため言語コードを調べたらまさかの"id"
とりあえずやるだけやってみようと思いリソース追加の対応を開始。
カラムの命名がよくないと言ってしまえばそれまでだが、
HOGE_TITLE
HOGE_TITLE_EN
このようにカラムを作っているため、Entity等は
hogeTitle
hogeTitleEn
のようにしていた。
そのためインドネシアの"id"を付与したカラムを追加すると以下のようになった。
hogeTitleId
lintでチェックしてみたら当然
struct field hogeTitleId should be hogeTitleID [go/golint]
知ってた。
go-i18nに怒られた。
"id"がだめなら仕方ない統一感はなくなるが3文字で"ind"にしてみよう。
hogeTitleInd
lintチェック問題なし。よしよし。
問題なさそうだしリソースファイル追加しよう。
ind.all.json を追加してビルド!
panic: no language found in "ind.all.json"
なん・・・だと・・・
どうやらgo-i18nではもともと決められた言語コードしか対応していないようだった。適当に作ってもだめなんですね。そりゃそうか。
回避策
ドキュメントを読み進めているとgo-i18nのREADMEに
Supports pluralized strings for all 200+ languages
in the Unicode Common Locale Data Repository (CLDR).
こんな記述がだいぶ上のほうにあった。先にREADME見ましょうってことですよね。
Unicode Common Locale Data Repositoryのリンク先ページを確認すると
Indonesianの所にこんなことが書いてあることを発見。
Code | Type |
---|---|
in | =id |
inで定義すればidと同義として受け取ってくれるということだと思い、ためしてみます。
in.all.json のリソースファイルを追加してビルド
今回はビルド成功しました!
リソースファイルの方が問題なかったのでEntity等も
hogeTitleIn
として追加していきます。
こちらのlintチェックも問題ないことを確認して無事解決。
教訓
ドキュメントはちゃんと読みましょう。