Rails: How to use i18n with Rails 4 enums

后端 未结 16 2297
天涯浪人
天涯浪人 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:42

    Yet another way, I find it a bit more convenient using a concern in models

    Concern :

    module EnumTranslation
      extend ActiveSupport::Concern
    
      def t_enum(enum)
        I18n.t "activerecord.attributes.#{self.class.name.underscore}.enums.#{enum}.#{self.send(enum)}"
      end
    end
    

    YML:

    fr:
        activerecord:
          attributes:
            campaign:
              title: Titre
              short_description: Description courte
              enums:
                status:
                  failed: "Echec"
    

    View :

    <% @campaigns.each do |c| %>
      <%= c.t_enum("status") %>
    <% end %>
    

    Don't forget to add concern in your model :

    class Campaign < ActiveRecord::Base
      include EnumTranslation
    
      enum status: [:designed, :created, :active, :failed, :success]
    end
    

提交回复
热议问题