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.
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
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With