Ruby on Rails: вставка частичного на другом языке (локаль) - PullRequest
7 голосов
/ 31 октября 2011

В моем многоязычном приложении есть представление, которое вызывает партиал:

  <%= render :partial => 'shared/order', :object => @order %>

языком по умолчанию является русский и shared / _order.html.erb использует I18n.t

<%= t('.order_type') %>: <b><%= t("order_types.#{order.order_type}") %></b>
<%= t '.date_and_time' %>: <b><%= l(order.date, :format => :long) %>

И я хочу визуализировать то же самое частичное еще раз, но на английском, без изменения переменной I18n.locale . Написав что-то вроде этого:

  <%= render :partial => 'shared/order', :object => @order %>
  <%= render :partial => 'shared/order', :object => @order, :locale => 'en' %>

Какова наилучшая практика для достижения такого поведения?

Ответы [ 2 ]

6 голосов
/ 15 марта 2016

Вы всегда можете использовать что-то подобное для запуска блока кода в определенной локали:

<%= render :partial => 'shared/order', :object => @order %>
<%- I18n.with_locale('en') do %>
  <%= render :partial => 'shared/order', :object => @order %>
<%- end %>
2 голосов
/ 31 октября 2011

Hmmmmm.Сложный вопрос.Я сделал бы следующее:

<%= render :partial => 'shared/order', :object => @order %>
<%= render :partial => 'shared/order', :object => @order, :locals => {:locale => 'en'} %>

и затем в частичном представлении:

<% before_locale = I18n.locale %>
<% locale ||= before_locale %>
<% I18n.locale = locale %>

..... do things here ....

<% # return back to original locale %>
<% I18n.locale = before_locale %>

Я действительно не знаю, является ли это лучшим.Просто пришло мне в голову, как первое решение вашей проблемы.

...