繁体   English   中英

这是翻译 enum 以在使用 I18n 的 select 中使用的最佳方法吗?

[英]This is the best way to translate enum to use in select with I18n?

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

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}

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

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

翻译枚举 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM