1

我有几个包含翻译的表格。为了简化对所有翻译的访问并对其进行缓存,我在Rails初始化后读取表格并在翻译存储中注入其内容。翻译商店重新加载时是否有办法触发某个操作?

#store translations in the I18n store 
    I18n.available_locales.each do |lang| 
    storage_hash = {:text => {}, :permalink => {}} 
    Translation.where(:translatable_type => self.name, :language=> lang).each do |c| 
     storage_hash[:text][c.translatable_id.to_s] = c.text 
     storage_hash[:permalink][c.translatable_id.to_s] = c.permalink 
    end 
    I18n.backend.store_translations(lang, self.name.downcase => storage_hash) 
    end 

它工作的很好,但在开发中,有时翻译存储被重置,我放弃了我之前添加的翻译。

这是否发生在生产?有没有回调我可以用来重新填写我的翻译?或者有更好的方法去做我想做的事吗?

回答

0

在seed.rb脚本中添加您的翻译或仅在配置/区域设置文件中添加您的翻译。

+0

翻译可以由用户修改,将其存储在本地文件没有帮助。 – jlfenaux 2012-02-14 17:32:26

1

有一个更好的方法来做到这一点。它被称为I18n后端,您可以在指南中了解它们:http://guides.rubyonrails.org/i18n.html#using-different-backends

也可以链接后端,以便为翻译建立回退。 I18n是一个非常强大的图书馆,仔细看看文档https://github.com/svenfuchs/rails-i18n

+0

如果我使用例如activerecord后端,翻译是否会缓存在内存中,就像它们与yaml文件一样,或者每次都会调用后端,最后请求数据库。这是我想要避免的。 – jlfenaux 2012-02-16 15:11:57

+0

我认为他们会在生产中缓存。其他一切真的很糟糕,我想没人会用它。但应该很容易证明这一点。 – phoet 2012-02-16 16:10:55

+0

谢谢,我会试试看。 – jlfenaux 2012-02-16 16:21:15

相关问题