如何控制存储在数据库中的RoR I18n文本?

时间:2013-05-13 10:15:04

标签: ruby-on-rails internationalization backend seeding

我在我的Ruby on Rails 3.2应用程序中使用了来自Sven Fuchs的I18n Gem,虽然gem工作得很好但我遇到了一种情况,我不知道解决方案:

我有一个种子文件,其中包含我的MVC的基本翻译,并且当我在新机器上安装我的应用程序时播种。问题是,当其中一个翻译发生变化时,我必须转到我的种子文件,编辑它,在数据库中删除并重新种植它。哪个问题不是最好的方法。

此外,我的应用程序可以动态创建完整的MVC,当然也需要翻译。这些翻译只存储在数据库中。但是将它们存储在一个真实的文件中,将它们置于版本控制之下并根据需要导入或导出它们会很好。

所以,基本上我正在寻找的是我数据库中的翻译和我文件中的翻译之间的智能连接。所以我可以从另一个或vica verca填充一个并保持它们同步。

我还查看了像Globalize3或localeapp这样的解决方案,但它们似乎不合适。

总结一下,我所拥有的是:

  • 来自Sven Fuchs的带有后端的I18n宝石我自己创造了
  • 种子文件有时会发生变化,必须手动编辑,但却会基本翻译
  • 包含即时创建并且不受版本控制但也不存储在某个文件中的翻译的数据库

我想要的是什么:

  • 我的种子文件和我的数据库中的翻译之间的同步
  • 将我的翻译置于版本控制之下的方法

我确信我不可能是唯一需要这个的人......

非常感谢!

1 个答案:

答案 0 :(得分:0)

以下是我如何解决问题更接近问题:

task :task_name => [:environment] do  

  file = "db/file_name.txt"

  counter = 0

  CSV.foreach(file, :headers => true, :col_sep => "^", :quote_char => "~") do |row|
    identifier = row[0].to_i
    model_name = ModelName.find_or_create_by_identifier(identifier)
    I18n.locale = row[1]
    model_name.name = row[3]
    model_name.save!
  end
end

请注意,标识符必须是唯一的标识符,该标识符不会更改并存在于文件和数据库中。在此示例中,列由“^”分隔,而quores为“〜”

正如@tigrish在评论中所说,插入文件和数据库并不是一个好主意,所以限制这一点很重要。

这些链接也可能有所帮助:

由于问题有点老,我希望它可以帮助别人。