【问题标题】:What is the best way to translate enum for use in select with I18n?这是翻译枚举以在 I18n 选择中使用的最佳方法?
【发布时间】:2018-07-03 15:29:25
【问题描述】:

有没有更好的方法来编写这段代码? 他目前为正确的枚举创建了一个带有翻译的哈希。

class ApplicationRecord < ActiveRecord::Base
  def self.translate_enum(enum)
    self.send(enum.to_s).map do |key, value|
      { self.human_enum_name(enum, key) => value }
    end.reduce(:merge)
  end
end

class EnumerableObject < ApplicationRecord
     enum sales_exception: { without: 0, income: 1, commitment: 2, restriction: 3 }, _suffix: true
end

EnumerableObject.translate_enum(:sales_exception)
=> {"Sem Exceção"=>0, "Exceção Renda"=>1, "Exceção Comprometimento"=>2, "Exceção Restrição"=>3}

【问题讨论】:

    标签: ruby-on-rails enums rails-i18n


    【解决方案1】:

    我更喜欢使用enumerate_it gem 而不是上面的,因为 我们可以用这个 gem 定义和使用translations。 也很简单,提供范围、辅助方法和易于重用的枚举

    【讨论】:

    【解决方案2】:

    Enumerizegem 或Translate Enumgem 是不错的选择。两者都允许您在本地化文件中声明翻译,从而允许翻译不同的语言。 两者在实现上都非常相似,我都使用过,我会使用其中一个的唯一原因是与其他 gem 的集成。

    Translate 枚举 gem 的示例:

    class Post < ActiveRecord::Base
      include TranslateEnum
    
      enum status: { published: 0, archive: 1 }
      translate_enum :status
    end
    

    在您的本地化文件中:

    en:
      activerecord:
        attributes:
          post:
            status_list:
              published: Was published
              archive: Was archived
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-24
      • 2012-10-21
      • 1970-01-01
      • 2022-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多