Rails: How to use i18n with Rails 4 enums

后端 未结 16 2237
天涯浪人
天涯浪人 2020-11-28 04:10

Rails 4 Active Record Enums are great, but what is the right pattern for translating with i18n?

16条回答
  •  醉梦人生
    2020-11-28 04:45

    Starting from Rails 5, all models will inherit from ApplicationRecord.

    class User < ApplicationRecord
      enum status: [:active, :pending, :archived]
    end
    

    I use this superclass to implement a generic solution for translating enums:

    class ApplicationRecord < ActiveRecord::Base
      self.abstract_class = true
    
      def self.human_enum_name(enum_name, enum_value)
        I18n.t("activerecord.attributes.#{model_name.i18n_key}.#{enum_name.to_s.pluralize}.#{enum_value}")
      end
    end
    

    Then I add the translations in my .yml file:

    en:
      activerecord:
        attributes:
          user:
            statuses:
              active: "Active"
              pending: "Pending"
              archived: "Archived"
    

    Finally, to get the translation I use:

    User.human_enum_name(:status, :pending)
    => "Pending"
    

提交回复
热议问题