0

我是 RoR 的用户。

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

示例是关于用户模式的。

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

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

User.human_attribute_name("login")

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

我怎么得到这个?

4

2 回答 2

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

于 2013-11-10T18:55:53.013 回答
1

详细说明@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
于 2017-03-28T12:26:57.230 回答