Trouble on using the i18n gem with partial template files

后端 未结 3 1774
误落风尘
误落风尘 2021-02-20 04:21

I am using Ruby on Rails 3.1 and I would like to know how to correctly handle internationalization related to partial template files. That is, ...

... in my app/vi

相关标签:
3条回答
  • 2021-02-20 05:07

    I wrote this. What do you think about it?

    def translate_for_partials key, *args
      I18n.t("#{params[:controller].gsub('/', '.')}.#{params[:action]}.#{key}", *args)
    end
    

    Is that bad to make such a method ?

    0 讨论(0)
  • 2021-02-20 05:11

    One way would be to using scope, instead of "lazy loading" using the full stop. Something like this should work:

    I18n.t :test_key2, :scope => 'users.flag'
    

    or use:

    I18n.t "users.flag.test_key2"
    

    Lastly, you could even pass it to the partial as in

    <%= render :partial => "/users/flag_form", :locals => { :test_key => t('.test_key1') } %>
    

    You should also checkout the appendix section on this website as it might be listing something that I am missing: http://www.unixgods.org/~tilo/Rails/where_is_Rails_trying_to_lookup_L10N_strings.html

    0 讨论(0)
  • 2021-02-20 05:21

    config/locales/en.yml

    en:
      users:
        flag:
          test_key1: Test 1 text
        flag_form:
          test_key2: Test 2 text
    

    app/views/users/flag.html.erb

    <%= t('.test_key1') %>
    <%= render :partial => "/users/flag_form" %>
    

    app/views/users/_flag_form.html.erb

    <%= t('.test_key2') %>
    

    NB:

    1. Rails path to the view must match YAML path to the symbol. You need to create an entry at YAML file that matches the name of the view. Omit the trailing underscore since it's a partial.
    2. Read more about lazy lookups
    0 讨论(0)
提交回复
热议问题