【问题标题】:Rails I18n via database columnRails I18n 通过数据库列
【发布时间】:2011-07-14 21:19:02
【问题描述】:

我有一个包含列 name_en 和 name_es 的旧数据库表,我想知道根据用户的 i18n 偏好在 ActiveRecord 中查询任一翻译的最佳方法是什么。

我看到的 Rails 的 i18n 实现更倾向于将翻译存储在单独的哈希或表中,但我不想更改数据库的结构。

目前在旧的 PHP 应用程序中,我向 mysql 查询发送一个参数以替换 name_lang 并返回 name_enname_es AS name 以在我调用行的 id 时显示。 p>

【问题讨论】:

  • 使用scope 似乎是个好方法。
  • @Zabba:在此实施范围会有点长

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


【解决方案1】:

您应该创建一个初始化器,您将在其中放入:

class ActiveRecord::Base
  def self.has_translation(*attributes)    
    attributes.each do |attribute|
      define_method "#{attribute}" do
        self.send "#{attribute}_#{I18n.locale}"
      end
    end
  end
end

然后在你的模型中:

has_translation :name, :whatever

这样它就会根据您当前的语言环境自动调用正确的列名。在您看来:

@variable.name # calling @variable.name_en if locale = :en
               #         @variable.name_es if locale = :es

当然,我假设不存在名为 name 的表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    相关资源
    最近更新 更多