【问题标题】:Ruby on Rails: inserting a partial in different language (locale)Ruby on Rails:插入不同语言的部分(语言环境)
【发布时间】:2011-12-18 09:05:36
【问题描述】:

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

  <%= 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' %>

实现这种行为的最佳实践是什么?

【问题讨论】:

    标签: ruby-on-rails internationalization views erb partials


    【解决方案1】:

    你总是可以使用这样的东西在特定的语言环境中运行代码块:

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

    【讨论】:

      【解决方案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 %>
      

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

      【讨论】:

      • 是的。这也是我的第一个解决方案。无论如何谢谢!
      • 嗨,我更喜欢在每个翻译中使用特定的语言环境。 &lt;%= t "bidibip", locale: locale %&gt;
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-05
      • 1970-01-01
      • 1970-01-01
      • 2014-10-09
      相关资源
      最近更新 更多