1

重複の可能性:
アンカーとエイリアスを破棄せずに YAML ファイルを読み書きしますか?

次のように、アプリ内でその場で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

ご協力いただきありがとうございます。

4

0 に答える 0