そのソースを見てください、そして物事はあなたに明らかになるでしょう:
# File activemodel/lib/active_model/translation.rb, line 45
def human_attribute_name(attribute, options = {})
defaults = []
parts = attribute.to_s.split(".", 2)
attribute = parts.pop
namespace = parts.pop
if namespace
lookup_ancestors.each do |klass|
defaults << :"#{self.i18n_scope}.attributes.#{klass.model_name.i18n_key}/#{namespace}.#{attribute}"
end
defaults << :"#{self.i18n_scope}.attributes.#{namespace}.#{attribute}"
else
lookup_ancestors.each do |klass|
defaults << :"#{self.i18n_scope}.attributes.#{klass.model_name.i18n_key}.#{attribute}"
end
end
defaults << :"attributes.#{attribute}"
defaults << options.delete(:default) if options[:default]
defaults << attribute.humanize
options.reverse_merge! :count => 1, :default => defaults
I18n.translate(defaults.shift, options)
end
human_attribute_name
属性名をローカライズするのに最適です。英語のみを使用するアプリを作成している場合でも、ビジネスの拡大計画についてクライアントからのメールが受信トレイにすでに送信されている可能性があります。この拡大には、人々が右から左に書く国が含まれます。
使い方
Product
属性を持つモデルがあると仮定しtitle
ます。このように呼び出すhuman_attribute_name
:
Product.human_attribute_name 'title'
I18n.t
次のパラメータを使用して呼び出します(上記のスニペットの最後の行を参照)。
I18.t 'activerecord.attributes.product.title', {
:count=>1,
:default=>[:"attributes.title", "Title"]
}
したがって、特定のモデルおよび特定の属性の名前に固有の翻訳を提供できます。これらの翻訳のいずれかを提供しない限り、メソッドを介して作成された属性の英語バージョンを取得しますhumanize
。