Проблемы с использованием гема i18n с частичными файлами шаблонов - PullRequest
10 голосов
/ 07 января 2012

Я использую Ruby on Rails 3.1, и я хотел бы знать, как правильно обрабатывать интернационализацию, связанную с частичными файлами шаблонов.То есть ...

... в моем файле app/views/users/flag.html.erb у меня есть:

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

... в моем файле app/views/users/_flag_form.html.erb у меня есть:

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

Если в моем файле config/locales/views/users/en.yml ( примечание : я организую файлы, как указано в официальном руководстве RoR ), я использую

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

Test 1 text отображается в «основном» шаблоне (app/views/users/flag.html.erb) , но Test 2 text не для частичного шаблона (app/views/users/_flag_form.html.erb). Как я мог бы решить эту проблему, чтобы правильно отобразить Test 2 text?

Ответы [ 3 ]

17 голосов
/ 10 июля 2013

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 путь к представлению долженсопоставьте путь YAML с символом.Вам необходимо создать запись в файле YAML, которая соответствует имени представления.Пропустите заключительное подчеркивание, поскольку оно является частичным.
  2. Подробнее о ленивый поиск
11 голосов
/ 07 января 2012

Одним из способов было бы использование области видимости вместо «отложенной загрузки» с использованием полной остановки. Примерно так должно работать:

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

или используйте:

I18n.t "users.flag.test_key2"

Наконец, вы можете даже передать его в частичное, как в

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

Вам также следует ознакомиться с разделом приложения на этом веб-сайте, поскольку он может содержать список того, что мне не хватает: http://www.unixgods.org/~tilo/Rails/where_is_Rails_trying_to_lookup_L10N_strings.html

0 голосов
/ 30 апреля 2013

Я написал это. Что вы думаете об этом?

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

Разве плохо делать такой метод?

...