加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 通过数据库列Rails I18n

发布时间:2020-12-17 04:04:08 所属栏目:百科 来源:网络整理
导读:我有一个遗留数据库表,其中包含name_en和name_es列,并想知道在ActiveRecord中查询基于用户的i18n首选项进行翻译的最佳方法是什么. 我在Rails中看到的i18n实现更倾向于将翻译存储在单独的散列或表中,但我不想改变数据库的结构. 目前在旧的PHP应用程序中,我向m
我有一个遗留数据库表,其中包含name_en和name_es列,并想知道在ActiveRecord中查询基于用户的i18n首选项进行翻译的最佳方法是什么.

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

目前在旧的PHP应用程序中,我向mysql查询发送一个参数来替换name_lang并返回name_en或name_es AS名称,以便在我调用行的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的表.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读