8 Stimmen

Ruby on Rails: Einfügen eines Teils in einer anderen Sprache (Gebietsschema)

In meiner mehrsprachigen Anwendung gibt es eine Ansicht, die einen Teilbereich aufruft:

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

die Standardsprache ist Russisch und shared/_order.html.erb verwendet I18n.t

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

Und ich möchte genau denselben Teil noch einmal wiedergeben, aber auf Englisch, ohne die I18n.Gebietsschema variabel. Indem Sie etwas wie dies schreiben:

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

Welches sind die besten Methoden, um ein solches Verhalten zu erreichen?

7voto

Sebastian Oelke Punkte 81

Sie können so etwas immer verwenden, um einen Codeblock in einem bestimmten Gebietsschema auszuführen:

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

1voto

p.matsinopoulos Punkte 7536

Hmmmmm. Eine schwierige Frage. Ich würde das Folgende tun:

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

und dann in der Teilansicht:

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

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

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

Ich weiß wirklich nicht, ob das die beste Lösung ist. Mir ist nur eine erste Lösung für Ihr Problem in den Sinn gekommen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X