I18n
Railsで多言語化や、表示文言の統一などで用いるRuby のgemです。
詳しいことはネット上にたくさんわかりやすい記事がありますので省略させていただきます。
問題
さっそく表題にある問題について書いていきます。
ソースコードは以下のとおりです。
ja:
example:
true: "おk"
false: "だめ"
<div>
<%= t('example.true') %>
<%= t('example.false') %>
</div>
「おk/だめ」が表示されるのを期待したのですが以下のようなエラーが発生。
translation missing: ja.example.true
translation missing: ja.example.false
設定がミスっていないことを確認して原因を調べると、同じ問題に直面している方とそれに対する解決策が見つかりました。
https://github.com/rails/rails/issues/27829
解決策
つまるところ、キーのtrue/false をダブルクォーテーションで囲めば上手くいきます。
ja:
example:
"true": "おk" # 'true'でもいいよ
"false": "だめ" # 'false'でもいいよ
yes/no でも同じ現象が起きるみたいですが、同じようにダブルクォーテーションで囲ってあげれば大丈夫みたいです。
「enumerizeのI18nではまったこと」
https://qiita.com/runamoon@github/items/d0a953afc25ea4e9365b
「YAML: Keys like "yes" or "no" evaluate to true and false」
https://makandracards.com/makandra/24809-yaml-keys-like-yes-or-no-evaluate-to-true-and-false
以上です。
メモ
表題について調べてる途中に、i18n の小技集という記事があったのでメモとして残させていただきます。意外にこういう細かいことは検索しても出てきにくいので、とてもありがたいです。先人に感謝です。
「i18nロケールファイルの書き方小技集」
https://qiita.com/tomomomo1217/items/858f290a0dc1a817985c