2012-04-13 8 views
0

Ich verwende Ruby on Rails v3.2.2 und globe3 v0.2.0 ruby-Edelsteine. Da mag ich Übersetzungsdaten für ein Objekt aktualisieren (so richtige Daten zu speichern, indem Sie globalize3) ich den folgenden Code verwenden in meiner Controller-Datei:Wie kann man Einstellungen verbessern und temporäre Variablen um einen Codeblock herum bekommen?

# Note how I set locale variables. 
def update 
    temp_locale = I18n.locale 
    I18n.locale = 'it' # 'it' stands for italian 

    @article = Article.find(params[:id]) 

    respond_to do |format| 
    if @article.update_attributes(params[:article]) 
     format.html { redirect_to article_path(@article), notice: 'Article was successfully updated.' } 
    else 
     format.html { render action: "edit" } 
    end 
    end 

    I18n.locale = temp_locale 
end 

Der obige Code funktioniert wie erwartet (das heißt, es aktualisiert übersetzte Daten in der Datenbank für die italienische Sprache), aber ich denke, dass die Art und Weise, wie ich lokale Variablen setze, falsch oder zumindest nicht richtig oder vielleicht nicht haltbar/lesbar ist. Es gibt eine Möglichkeit, das zu verbessern? Oder, im Allgemeinen, gibt es eine Möglichkeit, die Einstellung zu verbessern und temporäre Variablen um einen Codeblock herum zu bekommen? Was raten Sie zu?

+2

Sie könnten einen 'around_filter' verwenden, ist aber viel des Guten für eine kleine Nutzung. – Zabba

Antwort

1

sah ich in den Code für den i18n und fanden diese:

I18n.with_locale('it') do 
    # Italian stuff 
end 

Es bestätigt auch Ihr die Eingabe und verwendet eine Klausel, die im Falle der schwarze löst einen Fehler zu erholen.

Hier ist die Dokumentation: http://rubydoc.info/docs/rails/2.3.8/I18n.with_locale

+0

Ist die 'with_locale'-Methode für das in Ruby on Rails v3.2.2 enthaltene I18n-Juwel verfügbar? oder ist es nur für Ruby on Rails 2.3.8 verfügbar? – Backo

+0

Ich dachte, dass I18n eigentlich ein separates Juwel war. Vielleicht war es Teil von Rails während 2.x, aber es ist in Rails 3 getrennt. Ich würde vermuten, dass sie diese Änderung in einer kleinen Revision nicht gemacht hätten, aber probieren Sie es aus, wenn Sie 3.2.2 haben, oder versuchen Sie ein Upgrade (Minor Numbers stellen Bugfixes dar, zumindest in Rails). Außerdem können Sie mit dem qandry-Juwel den Quellcode untersuchen, um festzustellen, ob die Methode vorhanden ist. –

Verwandte Themen