gemを使わずにenumを日本語化
Railsでenumを日本語化する方法を検索すると、enum_helpというgemを使用する方法がたくさんヒットします。
しかし先日、gemを使わなくても日本語化できる方法を知りました!!
方法
以下のようにモデルでenumでステータスの値を設定しているとします。
app/models/hoge_build.rb
class HogeBuild < ApplicationRecord
略
enum status: [:creating, :sending, :finished, :erorr]
end
モデルのi18n設定と同じ階層にenum用の項目を作り、その配下に各enumの値を書いていきます。
config/locales/models/ja.yml
ja:
activemodel: &activemodel
models:
hoge_build: ほげ一括作成
attributes:
hoge_build:
reated_at: 作成日
updated_at: 更新日
status: ステータス
hoger_build/status:
creating: 作成中
sending: 送信中
finished: 完了
erorr: エラー
application_record.rbに上記のja.ymlを呼び出すメソッドを追加します。
app/models/application_record.rb
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
def self.human_attribute_enum_value(attr_name, value)
human_attribute_name("#{attr_name}.#{value}")
end
def human_attribute_enum(attr_name)
self.class.human_attribute_enum_value(attr_name, self[attr_name])
end
end
これらの設定をした上でviewファイルで以下のようにenumを呼び出してあげると日本語化されております!!
Before(英語のまま)
After(日本語化)
しかしなぜか空欄だった場所に「ステータス」という文言が表示されてしまう。。。
ここはこれから修正方法探します。
感想その他
gemを入れなくても比較的簡単に日本語化することができたので良いと思いました。
enumの値がない時に「ステータス」と出てしまった部分はどうすれば修正できるか調査します!!