次のように、アプリ内でその場で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されません。somethingmain.keymain.another_keymainsomething
そのため、エイリアスがYAML.dumporで逆参照されるようYAML.loadです。yaml ファイルで定義されているようにエイリアスを保存する方法はありますか? de.yml次のようになります (エイリアス名が変更されてもかまいません):
---
main: &18803600
key:
title: translation
another_key:
title: another translation
something:
<<: *18803600
key: val
ご協力いただきありがとうございます。