2012-04-13 32 views
0

我正在使用Ruby on Rails v3.2.2和globalize3 v0.2.0 ruby​​-gems。如何改善设置和获取代码块周围的临时变量?

# 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 

上面的代码按预期工作(也就是它:因为我想为对象更新转换数据我使用下面的代码在我的控制文件(可以这么用globalize3存储正确的数据)更新意大利语言数据库中的翻译数据),但我认为我设置局部变量的方式是错误的,或者至少不是正确的,或者可能是不可维护/可读的。 有一种方法可以改善?或者,一般来说,有一种方法可以改善设置并在代码块周围获取临时变量?你有什么建议?

+2

你可以用一个'around_filter',但矫枉过正一个小的使用。 – Zabba 2012-04-13 22:52:46

回答

1

我看着为国际化的代码,并发现这一点:

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

它甚至验证您的输入,并采用了保证条款的情况下,收回黑引发错误。

这里的文档:http://rubydoc.info/docs/rails/2.3.8/I18n.with_locale

+0

“on_locale”方法是否可用于Ruby on Rails v3.2.2中包含的I18n gem?或者它仅适用于Ruby on Rails 2.3.8? – Backo 2012-04-14 02:41:56

+0

我以为I18n是一个单独的宝石,实际上。也许它在2.x中是Rails的一部分,但它在Rails 3中是分开的。我会怀疑他们不会在一个小的修订版本中做出这个修改,但是如果你有3.2.2,就试试它,或者尝试升级小数字表示错误修正,至少在Rails中)。此外,您可以使用qwandry gem来检查源代码以查看该方法是否存在。 – 2012-04-15 10:38:27

相关问题