我是RoR的用户。
从官方文档中,我了解如何定义有关activerecord的翻译文件。
示例与用户模式有关。
en:
activerecord:
models:
user: Dude
attributes:
user:
login: "Handle"
并获得这样的属性含义。 “登录” - > “处理”
User.human_attribute_name("login")
现在,我想知道模型属性名称。 “处理” - > “登录”
我如何得到这个?
答案 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