如何在Ruby on Rails中获取翻译文件的反向查找含义

时间:2013-11-10 14:08:46

标签: ruby-on-rails ruby

我是RoR的用户。

从官方文档中,我了解如何定义有关activerecord的翻译文件。

示例与用户模式有关。

en:
  activerecord:
    models:
      user: Dude
    attributes:
      user:
        login: "Handle"

并获得这样的属性含义。 “登录” - > “处理”

User.human_attribute_name("login")

现在,我想知道模型属性名称。 “处理” - > “登录”

我如何得到这个?

2 个答案:

答案 0 :(得分:2)

我没有在I18n中看到具有此类功能的方法,但如果您愿意,可以做一些非常讨厌的事情:

kv = I18n::Backend::KeyValue.new({})
flat = kv.flatten_translations(:en, I18n.config.backend.send(:translations), false, nil)
flat.find {|key, value| value == "Handle"}

这应输出en.activerecord.attributes.user.login

答案 1 :(得分:0)

阐述@phoet的漂亮小黑客(谢谢!)

module ReverseTranslationLookup
  extend self

  def lookup(locale, copy)
    locale_messages(locale)[copy]
  end

  private

  def locale_messages(locale)
    messages[locale] ||= build_backend(locale)
  end

  def messages
    @messages ||= {}
  end

  def build_backend(locale)
    backend      = I18n::Backend::KeyValue.new({})
    translations = I18n.config.backend.send(:translations)
    backend.flatten_translations(locale, translations, false, nil)
      .select { |key, val| val.is_a?(String) }
      .invert
  end
end