Rails 3 I18n用于数据库表
我正在寻找有关使用国际化的最佳实践的一些提示和建议。 我一直在四处寻找,但我对所读的内容并不满意。 我读过的大部分文章都集中在使用I18n的yml文件,这在我的情况下是行不通的。
我目前有几个带英文文本的数据库表。 其中一些表的文本字段长度只有几个句子,有些则是6个段落的文本。 我想在西class牙语中也有这些字段。
我目前正在考虑的方法是使用I18n活动记录gem并拥有1个翻译表,该应用程序将用于应用程序中的所有翻译
class CreateTranslations false t.timestamps end end def self.down drop_table :translations end end
这是最好的方法吗?
一方面,所有翻译都将很好地存储在一个表中。 另一方面,每次用户向数据库查询I18n内容时。 应用程序将在原始表中查询密钥,然后查询转换表。 另一个问题是转换表将是庞大的并且具有大量行,因为它将存储应用程序的所有翻译(从章节标题[几个单词]到整个文本页面的所有内容)。
任何信息表示赞赏。 谢谢
在db中存储翻译并不是一个糟糕的解决方案。 不要害怕大表 – 数据库是为此而制作的! 只需确保正确配置索引并尽可能缓存。
另一个更快,可能更好的解决方案是使用Redis作为I18n的后端。 请参阅http://guides.rubyonrails.org/i18n.html#using-different-backends和http://railscasts.com/episodes/256-i18n-backends 。
无论你在哪里存储翻译,都没有必要尝试自己管理插值,因为I18n库处理得非常好(除非你做的是真正的自定义,即)。
您必须存储在数据库上的唯一优势是您假装即时编辑它。 所以如果这是你的意图,那么空闲的建议是一种方法。 但是如果你没有考虑这个问题,那么简单的YML就可以完成翻译界面,表名,字段名等的工作。
如果您想使用多种语言存储数据,那么您应该花一些时间进行特定的数据库建模。
您基本上可以通过两种方式执行此操作: – 使用多种语言复制所需的字段 – 重复插入itens并使用该语言标记,您还可以将原始版本指向所有副本以更好地跟踪它们。