Ruby on Rails:用不同的语言插入部分语言(语言环境)

ins*_*ero 7 views ruby-on-rails erb internationalization partials

在我的多语言应用程序中有一个调用部分的视图:

  <%= render :partial => 'shared/order', :object => @order %>
Run Code Online (Sandbox Code Playgroud)

默认语言是俄语,共享/ _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) %>
Run Code Online (Sandbox Code Playgroud)

而且我希望在不改变I18n.locale变量的情况下,再用英语渲染相同的部分时间.通过写这样的东西:

  <%= render :partial => 'shared/order', :object => @order %>
  <%= render :partial => 'shared/order', :object => @order, :locale => 'en' %>
Run Code Online (Sandbox Code Playgroud)

实现此类行为的最佳做法是什么?

小智 6

您始终可以使用类似的内容在特定区域设置中运行代码块:

<%= render :partial => 'shared/order', :object => @order %>
<%- I18n.with_locale('en') do %>
  <%= render :partial => 'shared/order', :object => @order %>
<%- end %>
Run Code Online (Sandbox Code Playgroud)


p.m*_*los 1

嗯嗯。很难回答的问题。我会做以下事情:

<%= render :partial => 'shared/order', :object => @order %>
<%= render :partial => 'shared/order', :object => @order, :locals => {:locale => 'en'} %>
Run Code Online (Sandbox Code Playgroud)

然后在局部视图中:

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

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

<% # return back to original locale %>
<% I18n.locale = before_locale %>
Run Code Online (Sandbox Code Playgroud)

我真的不知道这是否是最好的。我刚刚想到作为解决你的问题的第一个解决方案。