次のように、アプリ内でその場でyamlファイルを変更するために、デフォルトのyamlエンジンでruby 1.9.3を使用しています。
require 'yaml'
langs = YAML.load_file("i18n/de.yml")
langs["key"] = 'val' # change key to new value val
File.open("i18n/de.yml", 'w') do |f|
YAML.dump(langs,f)
end
これは非常にうまく機能しますが、yml のエイリアスに問題があります。したがって、次のようde.yml
になります。
---
main: &aliasName
key:
title: translation
another_key:
title: another translation
something:
<<: *aliasName
上記のようにスクリプトを呼び出した後、この get は次のように変換されます。
---
main:
key: &18803600
title: translation
another_key: &18803120
title: another translation
something:
key: *18803600
another_key: *18803120
key: val
main
たとえば、手動でファイルを編集して何かを追加すると、エイリアスは明示的にエイリアスのみに変換され、との間でエイリアス化main.third_key
されません。something
main.key
main.another_key
main
something
そのため、エイリアスがYAML.dump
orで逆参照されるようYAML.load
です。yaml ファイルで定義されているようにエイリアスを保存する方法はありますか? de.yml
次のようになります (エイリアス名が変更されてもかまいません):
---
main: &18803600
key:
title: translation
another_key:
title: another translation
something:
<<: *18803600
key: val
ご協力いただきありがとうございます。