カクカクしかじか

技術的なアレコレ

Railsのモデル名.human_attribute_name(:カラム名)って何だっけ?

はじめに

業務でRailsをいじっているものの、1からセットアップするとなるとよく分かってないで使っている部分の多さに毎回驚きます...
今回もその一つのRailsの日本語化の部分を備忘録として投稿します。

Railsのモデル名.human_attribute_name(:カラム名)ってなんだ?

ActiveRecord::Base のクラスメソッドであり、内部的に I18n モジュールを利用してくれるシロモノらしいです!
つまり config/locales/ja.yml に定義してある翻訳内容を良しなに解釈してくれるメソッドってなわけ。

定義方法

config/locales/ja.yml に以下のように記述をしておきます。

---
ja:
  activerecord:
    errors:
      messages:
        record_invalid: "バリデーションに失敗しました: %{errors}"
        restrict_dependent_destroy:
          has_one: "%{record}が存在しているので削除できません"
          has_many: "%{record}が存在しているので削除できません"
    models:
      tasks: タスク
    attributes:
      task:
        id: ID
        name: 名称
        description: 内容
        created_at: 登録日時
        updated_at: 更新日時

使い方

viewで翻訳したい部分に以下のような記載をします。

# t("activerecord.attributes.task.name")と同じ
Task.human_attribute_name(:name)
=> "名称"

t("activerecord.attributes.task.name")
=> "名称"

Task.human_attribute_name(:created_at)
=> "登録日時"

t("activerecord.attributes.task.created_at")
=> "登録日時"