RailsのI18nの辞書ファイルをマージするときにハマったので共有します。
sample.ja.yml
ja:
active_records:
model:
model_1:
name: 名前
のような辞書ファイルをモデルやビュー毎に作成していたのですが、これらを一つのファイルにマージしようとして、
command
cat models.yml views.yml controllers.yml > all.yml
ってやってもうまくマージできません。
yamlのノードを再帰的にマージしてあげる必要があります。で、作ったのがこれ。
merge-yaml.rb
require 'yaml'
merged_yaml = {}
def merge_yaml(yaml1, yaml2)
yaml2.each do |key, value|
if value.class == Hash && yaml1.key?(key)
yaml1[key] = merge_yaml(yaml1[key], value)
else
yaml1[key] = value
end
end
return yaml1
end
ARGV.each do |file|
yaml = YAML.load_file(file)
merged_yaml = merge_yaml(merged_yaml, yaml)
end
puts merged_yaml.to_yaml
コマンドラインにマージしたいyamlファイルを列挙してあげればオッケー。
command
ruby merge-yaml.rb views/ja.yml controllers/ja.yml models/ja.yml