gemを使わずにenumを日本語化

Railsenumを日本語化する方法を検索すると、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を呼び出してあげると日本語化されております!!
app/views/hoge_builds/_hoge_build.html.slim
tr
 略
td = hoge_build.human_attribute_enum(:status)
 

Before(英語のまま)

 

 

After(日本語化)

gyazo.com

 

しかしなぜか空欄だった場所に「ステータス」という文言が表示されてしまう。。。

ここはこれから修正方法探します。

 

 

感想その他

gemを入れなくても比較的簡単に日本語化することができたので良いと思いました。

enumの値がない時に「ステータス」と出てしまった部分はどうすれば修正できるか調査します!!