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并使用该语言标记,您还可以将原始版本指向所有副本以更好地跟踪它们。