0

我正在使用 Ruby on Rails v3.2.2 和 globalize3 v0.2.0 ruby​​-gems。由于我想更新对象的翻译数据(以便使用 globalize3 存储正确的数据),我在控制器文件中使用以下代码:

# 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

上面的代码按预期工作(即,它更新数据库中意大利语的翻译数据),但我认为我设置局部变量的方式是错误的,或者至少根本不正确,或者,也许,不可维护/可读。有办法改善吗?或者,一般来说,有一种方法可以改进围绕代码块设置和获取临时变量?你有什么建议?

4

1 回答 1

1

我查看了 i18n 的代码,发现了这个:

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

它甚至会验证您的输入并使用确保子句来恢复,以防黑色引发错误。

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

于 2012-04-14T01:49:33.163 回答