[英]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.