i18n-active_record 的 I18n 翻译:同一键的相同形式

I18n translation with i18n-active_record: same form for same key

我正在 Rails 4 中使用 i18n-active_record 0.1.0 开发一个应用程序,以便将我的翻译保存在数据库中而不是 .yml 文件中。它工作正常。

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

#1. { locale: "en", key: "hello", value: "hello")
#2. { locale: "se", key: "hello", value: "hej")

这使得更新它们成为一项繁琐的工作。我想把它作为一个,即:

{ key: "hello", value_en: "hello", value_se: "hej" }

或类似的,以便以一种形式更新一个键的所有实例。我似乎找不到任何相关信息,这让我很困惑。

有什么方法可以轻松做到这一点吗?任何类型的 hack 都可以。

您可以为翻译创建一个 ActiveRecord 对象 table,然后在该模型上创建读写函数。

读取函数会提取所有关联的记录,然后将它们组合成一个散列。

Write 函数将采用您的单个哈希输入并将它们拆分为多个记录以供 writing/updating。

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

  • 具有 key:string
  • 的翻译模型
  • 在翻译模型中:

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

在 ApplicationHelper 中:

  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