我想在Ruby On Rails中操作以下语言环境.yml文件:
fr:
back: Retour
signup: Inscription
helpers:
submit:
create: "Créer votre %{model}"
hello:
world: "Bonjour le monde"
所以我在我的控制器中解析它,如:
@yml_hash = YAML.load_file("config/locales/en.yml")
然后我在html.erb文件中使用以下帮助程序处理它:
module TranslationHelper
def render_hash(hash)
return ihash(hash)
end
def ihash(h, key = [], result = [])
h.each_pair do |k,v|
if v.is_a?(Hash)
key << k
ihash(v, key, result)
else
result << {full_key: key, key: k, value: v}
end
end
result
end
end
它返回输出:
[{:full_key=>["fr", "helpers", "submit", "hello"], :key=>"back",
:value=>"Retour"},
{:full_key=>["fr", "helpers", "submit", "hello"], :key=>"signup",
:value=>"Inscription"},
{:full_key=>["fr", "helpers", "submit", "hello"], :key=>"create",
:value=>"Créer votre %{model}"},
{:full_key=>["fr", "helpers", "submit", "hello"], :key=>"world",
:value=>"Bonjour le monde"}]
但实际上我的目标是在哈希中得到一个值的完整键,如下所示:
[{:full_key=>["fr"], :key=>"back", :value=>"Retour"},
{:full_key=>["fr"], :key=>"signup", :value=>"Inscription"},
{:full_key=>["fr", "helpers", "submit"], :key=>"create", :value=>"Créer votre %{model}"},
{:full_key=>["fr", "hello"], :key=>"world", :value=>"Bonjour le monde"}]
有没有办法在我的函数中处理哈希以获得那些结果?
感谢。
答案 0 :(得分:0)
我认为您需要使用clone
方法来创建新数组,因为引用相同的数组对象(key << k
)
正确:
def ihash(h, key = [], result = [])
h.each_pair do |k,v|
if v.is_a?(Hash)
new_key = key.clone
new_key << k
ihash(v, new_key, result)
else
result << {full_key: key, key: k, value: v}
end
end
result
end
快乐的编码!