README.md

human_attribute_values

human_attribute_values is a Rails plugin which provides translation for model attribute values using the Rails I18n API (analogously to human_attribute_name).

Installation

gem install human_attribute_values

Supported versions

Rails: >= 4.2.10

Ruby: MRI >= 2.3.0

Usage

The gem defines human_attribute_value as instance and class method on ActiveRecord::Base and ActiveModel::Model.
To translate a value it uses the I18n API. The translations are looked up from the current locale file under the key 'activerecord.values.model_name.attribute_name.value' respectively 'activemodel.values.model_name.attribute_name.value' by default.

Translations:

# For ActiveRecordclassSchroedinger < ActiveRecord::Base
enum cat_status: {dead_and_alive:0, alive:1, dead:2}
end# Translation on instances by passing the attribute to be translatedSchroedinger.new(cat_status::dead_and_alive).human_attribute_value(:cat_status)
=> "The box is still closed."# Translation on the model class by passing attribute and valueSchroedinger.human_attribute_value(:cat_status, :alive)
=> "You opened the box and kitty purs."# If there is no translation specified in the locale, the stringified value is returnedSchroedinger.human_attribute_value(:cat_status, :dead)
=> "dead"# For ActiveModel (the same except the lookup namespace)classFileModelincludeActiveModel::Modelattr_accessor:content_typeend
file =FileModel.new(content_type:'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
file.human_attribute_value(:content_type)
=> "Excel/Calc"FileModel.human_attribute_value(:content_type, 'application/pdf')
=> "PDF"FileModel.human_attribute_value(:content_type, 'text/plain')
=> "text/plain"

Strings and Symbols

Starting with version 1.2.0, dots in strings and symbols (actually in all values) are also replaced by an underscore for the lookup (before this was only done for numbers).

Child classes

For models with single table inheritance (STI), the lookup will start with the translations for the class and go up through the class hierarchy and use the translation for the closest parent if there is any.