Единственная плохая вещь в вашем помощнике, которую я вижу, это то, что вы пишете процентную скидку, но не очевидно, что она вернется (поэтому я бы создал здесь 2 различных вспомогательных метода.
Замечу ли яиспользование проверки локали в представлениях выглядит не очень красиво, когда вы видите, что блоки для разных переводов стали совершенно разными, поэтому я создал вспомогательный метод i18n для этой цели:
module ApplicationHelper
def translate_to(locales, &blk)
locales = [locales.to_s] if !locales.is_a?(Array)
yield if locales.include?(I18n.locale.to_s)
end
alias :tto :translate_to
end
и в представлениях:
<% tto :en do %>
<% # some en-translated routine %>
<% end %>
<% tto :zh do %>
<% # zh-translated routine %>
<% end %>
Не уверен, что это лучший способ управления переведенными блоками, но я нашел его полезным))