Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I have a legacy database table that has columns name_en and name_es and was wondering what the best way to query in ActiveRecord for either translation based on the user's i18n preference would be.

The i18n implementations I see for Rails tend to be more about storing translations in a separate hash or table, but I don't want to change the structure of the database.

Currently in the old PHP app, I send an argument to the mysql query to replace the name_lang and return name_en or name_es AS name for displaying when I call the row's id.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
818 views
Welcome To Ask or Share your Answers For Others

1 Answer

You should create an initializer in which you'd put:

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

Then in your models:

has_translation :name, :whatever

So that it will automatically call the proper column name depending on your current locale. In your view:

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

Of course, I assumed there was no already existing table named name.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...