我正在构建一个多语言网站,在rails上使用ruby,其中部分内容应该由用户生成,并且他们应该能够为所有语言创建不同版本的内容。语言支持由i18n gem处理。
部分内容是使用Markdown通过http://daringfireball.net/projects/markdown/basics创建的。
在我的数据库中,我为不同的语言环境保存:object.content_markdown_en,object.content_html_en,object.content_markdown_sv,object.content_html_sv等。
现在,如果用户更改内容,则应生成新的html。但是,如果他只使用其中一种语言进行更改,则似乎没有必要为所有语言环境重新生成html。
我认为可能有某种方法可以使用像
这样的东西if object.content_markdown_[locale]_changed?
generate_new_html
end
可以在循环中运行所有可能的语言环境。但我找不到任何好办法。
答案 0 :(得分:2)
怎么样:
[:en, :sv].each do |locale|
if object.send("content_markdown_#{ locale }_changed?".to_sym)
send("generate_new_#{ locale }_html".to_sym)
end
end
答案 1 :(得分:0)
您可以使用send
按名称调用方法:
object.send("content_markdown_#{locale}_changed?".to_sym)
你的循环看起来像这样:
%w(en sv).each { |locale|
if object.send("content_markdown_#{locale}_changed?".to_sym)
generate_new_html
end
}
但是,使用单独的转换表可能是更好的方法。