Rails 3 I18n用于数据库表

时间:2011-07-12 04:18:08

标签: ruby-on-rails database ruby-on-rails-3 internationalization

我正在寻找有关使用国际化的最佳做法的一些提示和建议。我一直在四处寻找,但我对我读到的内容并不满意。我读过的大部分文章都集中在使用I18n的yml文件,这在我的情况下无效。

我目前有几个带英文文本的数据库表。其中一些表的文本字段长度只有几句,有些则是6段以上的文本。我想在西班牙语中也有这些字段。

我目前正在考虑的方法是使用I18n-active记录gem并拥有1个应用程序将用于应用程序中所有翻译的翻译表

 class CreateTranslations < ActiveRecord::Migration
    def self.up
      create_table :translations do |t|
        t.string :locale
        t.string :key
        t.text   :value
        t.text   :interpolations
        t.boolean :is_proc, :default => false

        t.timestamps
      end
    end

    def self.down
      drop_table :translations
    end
  end

这是继续进行的最佳方式吗?

一方面,所有翻译都将很好地存储在一个表中。另一方面,每次用户向数据库查询I18n内容时。应用程序将在原始表中查询密钥,然后查询转换表。另一个问题是翻译表将是庞大的并且有大量的行,因为它将存储应用程序的所有翻译(从章节标题[几个单词]到整个文本页面。

任何信息都表示赞赏。感谢

2 个答案:

答案 0 :(得分:6)

在数据库中存储翻译并不是一个糟糕的解决方案。不要害怕大表 - 数据库是为此而制作的!只需确保正确配置索引并尽可能缓存。

另一个更快,可能更好的解决方案是使用Redis作为I18n的后端。请参阅http://guides.rubyonrails.org/i18n.html#using-different-backendshttp://railscasts.com/episodes/256-i18n-backends

无论你在哪里存储翻译,都没有必要尝试自己管理插值,因为I18n库处理得非常好(除非你做的事情是真正定制的,就是这样)。

答案 1 :(得分:-1)

您必须存储在数据库上的唯一优势是您假装即时编辑它。所以,如果这是你的意图,那么闲置的建议是一种方法。但是如果你没有考虑这个问题,那么普通的YML就可以完成翻译界面,表名,字段名等的工作。

如果您想使用多种语言存储数据,那么您应该花一些时间进行特定的数据库建模。

您基本上可以通过两种方式实现: - 使用多种语言复制所需的字段 - 重复插入itens并使用该语言标记,您还可以将原始版本指向所有副本以更好地跟踪它们。