Rails I18n通过数据库列

我有一个遗留数据库表,其中包含name_en和name_es列,并且想知道在ActiveRecord中根据用户的i18n首选项进行翻译的最佳方法是什么。

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

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

你应该创建一个初始化器,你可以在其中放置:

 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表。