使用i18n-active_record进行I18n转换:相同键的相同形式

Chr*_*fer 8 rubygems ruby-on-rails rails-i18n

我正在使用i18n-active_record 0.1.0在Rails 4中开发一个应用程序来保存我的翻译而不是.yml文件.它工作正常.

然而,我正在努力的一件事是,每个翻译记录是每个语言环境的一个记录,即

#1. { locale: "en", key: "hello", value: "hello")
#2. { locale: "se", key: "hello", value: "hej")
Run Code Online (Sandbox Code Playgroud)

这使得更新它们是一项繁琐的工作.我希望将它作为一个,即:

{ key: "hello", value_en: "hello", value_se: "hej" }
Run Code Online (Sandbox Code Playgroud)

或类似的,以便以一种形式更新一个密钥的所有实例.我似乎找不到任何关于那个的东西,这让我很困惑.

有没有办法轻松做到这一点?任何类型的黑客也都可以.

Chr*_*fer 0

我最终使用 Globalize 创建了自己的翻译功能。它没有明确依赖 I18n,因此它是一个并行系统,但它可以工作,虽然不太漂亮,也不是 I18n 的替代品,但它具有能够轻松添加语言环境并以一种形式处理所有翻译的重要功能。

  • 带 key:string 的翻译模型
  • 在翻译模型中:

    翻译 :value globalize_accessors :locales => I18n.available_locales, :attributes => [:value]

在应用程序助手中:

  def t2(key_str)
    key_stringified = key_str.to_s.gsub(":", "")
    t = Transl8er.find_by_key(key_stringified)
    if t.blank? 
      # Translation missing
      if t.is_a? String
        return_string = "Translation missing for #{key_str}"
      else
        return_string = key_str 
      end
    else
      begin
        return_string = t.value.strip
      rescue
        return_string = t.value
      end
    end
    return_string
  end
Run Code Online (Sandbox Code Playgroud)