Rails i18n supports lazy lookup so that if you have a locales file shaped like this:
en:
newsletter_cta:
title: "Stay Up To Date With The Lat...
For further actions, you may consider blocking this person and/or reporting abuse
I've also been running into this issue. But because I use the i18n-tasks gem to keep my localisation file in check I've chosen to write out the absolute path for a translation when using them within render blocks.
Basically what happens is as soon as you put a relative translation in a render block the path gets changed. In your example it would be: "application.section.title".
One way to approach this could be to pass the i18n scope of the view to the partial and use that when translating a key.
Something like:
Note the removed dot before "title" indicating this is not a relative lookup.
I think landing on "Use absolute paths at all times with I18n" is great advice, especially since the lookup inference pattern is pretty unique to Rails.
When you call
render "section"what it seems actually happens is it treats the partial as a template, this changes the scope of execution and therefore changes where those translations are executed.Instead you can explicitly render it as a partial by passing it as
render partial: "section". However, partials don't allow you to pass blocks to them, instead you'll need to capture the content into a variable and pass it as a local:Putting these in a helper tidies things up in the views:
Then in your view you can do:
In case somebody is looking for a workaround, here it is: