mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge pull request #14997 from jpcody/nested_value_i18n
Include label value in i18n attribute lookup
This commit is contained in:
commit
29ae431c51
4 changed files with 44 additions and 2 deletions
|
@ -1,3 +1,23 @@
|
||||||
|
* Take label values into account when doing I18n lookups for model attributes.
|
||||||
|
|
||||||
|
The following:
|
||||||
|
|
||||||
|
# form.html.erb
|
||||||
|
<%= form_for @post do |f| %>
|
||||||
|
<%= f.label :type, value: "long" %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
# en.yml
|
||||||
|
en:
|
||||||
|
activerecord:
|
||||||
|
attributes:
|
||||||
|
post/long: "Long-form Post"
|
||||||
|
|
||||||
|
Used to simply return "long", but now it will return "Long-form
|
||||||
|
Post".
|
||||||
|
|
||||||
|
*Joshua Cody*
|
||||||
|
|
||||||
* Change `asset_path` to use File.join to create proper paths:
|
* Change `asset_path` to use File.join to create proper paths:
|
||||||
|
|
||||||
https://some.host.com//assets/some.js
|
https://some.host.com//assets/some.js
|
||||||
|
|
|
@ -35,9 +35,9 @@ module ActionView
|
||||||
if block_given?
|
if block_given?
|
||||||
content = @template_object.capture(&block)
|
content = @template_object.capture(&block)
|
||||||
else
|
else
|
||||||
|
method_and_value = tag_value.present? ? "#{@method_name}.#{tag_value}" : @method_name
|
||||||
content = if @content.blank?
|
content = if @content.blank?
|
||||||
@object_name.gsub!(/\[(.*)_attributes\]\[\d+\]/, '.\1')
|
@object_name.gsub!(/\[(.*)_attributes\]\[\d+\]/, '.\1')
|
||||||
method_and_value = tag_value.present? ? "#{@method_name}.#{tag_value}" : @method_name
|
|
||||||
|
|
||||||
if object.respond_to?(:to_model)
|
if object.respond_to?(:to_model)
|
||||||
key = object.class.model_name.i18n_key
|
key = object.class.model_name.i18n_key
|
||||||
|
@ -51,7 +51,7 @@ module ActionView
|
||||||
end
|
end
|
||||||
|
|
||||||
content ||= if object && object.class.respond_to?(:human_attribute_name)
|
content ||= if object && object.class.respond_to?(:human_attribute_name)
|
||||||
object.class.human_attribute_name(@method_name)
|
object.class.human_attribute_name(method_and_value)
|
||||||
end
|
end
|
||||||
|
|
||||||
content ||= @method_name.humanize
|
content ||= @method_name.humanize
|
||||||
|
|
|
@ -19,6 +19,9 @@ class FormHelperTest < ActionView::TestCase
|
||||||
attributes: {
|
attributes: {
|
||||||
post: {
|
post: {
|
||||||
cost: "Total cost"
|
cost: "Total cost"
|
||||||
|
},
|
||||||
|
:"post/language" => {
|
||||||
|
spanish: "Espanol"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -154,6 +157,12 @@ class FormHelperTest < ActionView::TestCase
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_label_with_human_attribute_name_and_options
|
||||||
|
with_locale :label do
|
||||||
|
assert_dom_equal('<label for="post_language_spanish">Espanol</label>', label(:post, :language, value: "spanish"))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def test_label_with_locales_symbols
|
def test_label_with_locales_symbols
|
||||||
with_locale :label do
|
with_locale :label do
|
||||||
assert_dom_equal('<label for="post_body">Write entire text here</label>', label(:post, :body))
|
assert_dom_equal('<label for="post_body">Write entire text here</label>', label(:post, :body))
|
||||||
|
|
|
@ -712,6 +712,19 @@ en:
|
||||||
|
|
||||||
Then `User.model_name.human(count: 2)` will return "Dudes". With `count: 1` or without params will return "Dude".
|
Then `User.model_name.human(count: 2)` will return "Dudes". With `count: 1` or without params will return "Dude".
|
||||||
|
|
||||||
|
In the event you need to access nested attributes within a given model, you should nest these under `model/attribute` at the model level of your translation file:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
en:
|
||||||
|
activerecord:
|
||||||
|
attributes:
|
||||||
|
user/gender:
|
||||||
|
female: "Female"
|
||||||
|
male: "Male"
|
||||||
|
```
|
||||||
|
|
||||||
|
Then `User.human_attribute_name("gender.female")` will return "Female".
|
||||||
|
|
||||||
#### Error Message Scopes
|
#### Error Message Scopes
|
||||||
|
|
||||||
Active Record validation error messages can also be translated easily. Active Record gives you a couple of namespaces where you can place your message translations in order to provide different messages and translation for certain models, attributes, and/or validations. It also transparently takes single table inheritance into account.
|
Active Record validation error messages can also be translated easily. Active Record gives you a couple of namespaces where you can place your message translations in order to provide different messages and translation for certain models, attributes, and/or validations. It also transparently takes single table inheritance into account.
|
||||||
|
|
Loading…
Reference in a new issue