在Rails中迭代时,Locale不会切换

时间:2014-07-08 13:51:24

标签: ruby-on-rails-3 localization refinerycms rails-i18n

我已使用导出操作扩展了RefineryCMS blog / admin / posts控制器,将帖子导出到xml并将其保存到文件中。我需要导出所有翻译版本的帖子。单击导出时,它会保存所有文件,但所有文件都具有相同的区域设置。

我的代码有什么问题:

def generate_xml_by_locales
  translated_locales.each do |l|
    ::I18n.locale = l
    file = File.new("blog_#{l}.xml", "wb")
    xml = Builder::XmlMarkup.new :target => file
    xml.instruct!
    xml.blog do
      xml.title post.title
      xml.description "Sixteenth installment of development diary"
      xml.language l.to_s
      xml.author "Dan"
      xml.date post.created_at
      xml.category "diary"
      xml.text post.body
    end
    file.close
  end 
end

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我做了一次修改,效果很好。我没有通过I18n.locale更改语言环境,而是使用translations.where(locale:lang).first。不知道它是否是最佳解决方案,但它确实有效。

重构代码:

def generate_xml_by_locales
  translated_locales.each do |lang|
    generate_xml(translations.where(locale: lang).first, lang)
  end
end

def generate_xml post, lang
  file = File.new("blog_#{lang}.xml", "wb")
  xml = Builder::XmlMarkup.new :target => file
  xml.instruct!
  xml.blog do
    xml.title post.title
    xml.description "Sixteenth installment of development diary"
    xml.language lang.to_s
    xml.author "Dan"
    xml.date post.created_at
    xml.category "diary"
    xml.text post.body
  end
  file.close
end