Forced to end translation keys with "_html" to get html safe for translations, a good idea?

This recent patch https://rails.lighthouseapp.com/projects/8994/tickets/4362-patch-make-translate-less-safe-and-more-convenient changes t() so that translations are no longer html safe unless their keys ends with ".html" or "_html".

The reasoning is: "translations that do not contain html should not be marked html safe".

This makes sense - but what about a situation like this:

   # we have this translation: en.welcome_message = 'Hello %{user}'    t 'welcome_message', :user => link_to(user.name, user)

Here the translation itself contains no html, but the developer are still required to name it welcome_html to make it work.

In this context, the reasoning mentioned above does not make sense anymore.

Should I just add "_html" to translations that I assume I might use for interpolation, or am I solving the problem (of showing "Hello [user_link])" the wrong way? Or should t() be changed to accommodate this problem?

Here the translation itself contains no html, but the developer are still required to name it welcome_html to make it work.

In this context, the reasoning mentioned above does not make sense anymore.

Should I just add "_html" to translations that I assume I might use for interpolation, or am I solving the problem (of showing "Hello [user_link])" the wrong way? Or should t() be changed to accommodate this problem?

You could also wrap your translate call in raw:

raw(t('welcome_message', :user => link_to(user.name, user)))

I don't think there's a nicer fix to this without making the i18n stuff deeply aware of the xss escaping. Calling raw or using _html in the key name seems like a reasonable solution.