2015-12-14 2 views
0

Я использую I18n ленивый поиск, например. t ('. field') с Rails 4 и с обоих контроллеров и представлений, I18n делает соответствующий поиск. Но это не от помощников, и мне было интересно, есть ли причина или решение?i18n рельсы ленивый взгляд из помощника?

Похоже, что если я создам вспомогательную функцию, скажу «help()» и вызывая ее из нескольких разных представлений, я должен дважды определить те же строки I18n (да, я использую псевдонимы ;-)). Поэтому мне нужно, чтобы определить, как

  • (взгляды), view1.help.field ... и ...
  • (взгляды), view2.help.field

Есть хорошие способы избегать этого?

ответ

0

I18n.t использует текущий запрос как контекст. Так что, когда вы звоните:

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

От apps/views/users/show.html.erb он будет использовать ключ users.show.hello. Однако на apps/views/pets/show.html.erb перевод отсутствует, как вы заметили.

Неважно, если вы вызываете его в своем представлении или в помощнике, поскольку оба используют контекст представления.

Если вы хотите, чтобы избежать этого нужно было бы просто указать ключ перевода в явном виде:

<%= t('users.show.hello') %> 

Если вы хотите использовать динамический поиск и возвращаться к фиксированному ключу вы могли бы сделать это следующим образом:

<%= t('.hello', default: t('users.show.hello')) %> 
+0

Спасибо. Тот факт, что помощники «наследует» контекст представления, в котором они работают, объясняет, что я вижу. Я уже использовал решение «полный, фиксированный ключ», и это, вероятно, немного лучше, чем воспроизведение одного и того же ключа для каждого представления, использующего помощника. – Papadeltasierra

Смежные вопросы