У моїй багатомовній заявці є вигляд, який викликає часткове:
<%= 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" %>
Які найкращі практики для досягнення такої поведінки?
Відповіді:
4 для відповіді № 1Ви завжди можете використовувати щось подібне для запуску кодового блоку в певній місцевості:
<%= render :partial => "shared/order", :object => @order %>
<%- I18n.with_locale("en") do %>
<%= render :partial => "shared/order", :object => @order %>
<%- end %>
2 для відповіді № 2
Гммммм. Складне питання. Я б зробив наступне:
<%= 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 %>
Я справді не знаю, чи найкраще це. Щойно вирішив свою проблему.