【问题标题】:Locale does not switch while iterating in Rails在 Rails 中迭代时区域设置不会切换
【发布时间】:2014-07-08 13:51:23
【问题描述】:

我已经扩展了带有导出操作的 RefineryCMS 博客/管理员/帖子控制器,它将帖子导出到 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

感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

    我做了一个修改,效果很好。我没有通过 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
    

    【讨论】:

      猜你喜欢
      • 2015-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-22
      • 2021-04-28
      • 1970-01-01
      • 2011-06-20
      • 2013-04-28
      相关资源
      最近更新 更多