Wie kann ich Sortieren YAML-Dateien?
Ich habe versucht zu Sortieren, eine i18n-übersetzungen YAML-Datei mit Ruby, so dass ich verwalten können, neue übersetzungen in eine bessere und organisierte Art und Weise, aber ich hab mich schon gewundert, wenn es etwas gibt, um die Aufgabe zu erleichtern.
Fand ich eine YAML-Datei Schriftsteller, so kann ich schreiben Sie einen hash in einer Datei, aber mein problem ist das Sortieren der hash richtig. Wenn ich hash h
, h.sort
gibt ein array zurück, und ich habe immer noch nicht kapiert das ein einfacher Weg, das zu tun.
Ich habe YAML-Dateien wie dieses:
pt-br:
global:
misc:
total: "Total"
all: "Todos"
close: "Fechar"
cancel: "Cancelar"
crud:
access: "Acessar"
back: "Voltar"
edit: "Editar"
confirm: "Confirmar"
send: "Enviar"
...
(Die Dateien sind viel größer als diese)
Aber ich Sortieren möchten Ihnen auf diesem Weg:
pt-br:
global:
crud:
access: "Acessar"
back: "Voltar"
confirm: "Confirmar"
edit: "Editar"
send: "Enviar"
misc:
all: "Todos"
cancel: "Cancelar"
close: "Fechar"
total: "Total"
Dachte ich, dass die einige einfache rekursive Methode konnte mir wie folgt helfen:
def translation_sort(h)
if h.class == Hash
h = h.sort
h.each{|item| translation_sort(item)}
end
h
end
require "yaml"
h=YAML.load_file(File.open("~/pt-br.sample.yml"))
translation_sort(h)
- gibt es eine sublime plugin für das gleiche?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist eigentlich eine schöne Frage. Sie wollen tief Sortieren von hashes. Also ich mag nicht das Rad neu erfinden, und dann suchte ich für eine gute Umsetzung und ich fand eine, die ich mag. Werfen Sie einen Blick auf es https://gist.github.com/1083930. Es funktioniert einwandfrei.
sub_diagnostics_count: ! '# Sous-diagnostics'
die immer noch als String interpretiert, aber sieht schlecht aus). Gibt es eine Lösung für richtig, dass @lucapette ?array.sort
im Kern auf die in dieser Antwort gist.github.com/codeitagile/... - wenn Sie wollen, dass alles sortiert ist (Key sowie arrays Werte)Sollten Sie nicht verwenden das YAML-Bibliothek, wie vorgeschlagen, in den anderen Antworten. Es wird versauen die Formatierung der lange string-Werte, Ihre Kommentare zu entfernen, und spuckte unlesbar char entweicht, wenn Sie mit Akzenten und Sonderzeichen (die Sie, seit Sie dabei sind, i18n).
Verwenden Sie dieses Schmuckstück habe ich:
https://github.com/redealumni/i18n_yaml_sorter
Es wird nur sortiert die Zeilen der Datei, also alles wird die gleiche bleiben, wie es war auf den original-yaml (Ihre Akzente, die YAML konstruieren Sie verwendet, um die Zeichenfolgen, Einrückung, etc). Es funktioniert mit tief verschachtelten yamls und die Ergebnisse sind ziemlich solide. Der Edelstein enthält tests, und es ist gut für ruby 1.8 oder 1.9.
Es kommt mit ein TextMate Bundle (Umschalt - + Befehlstaste + S) und einer Rails rake-task, so können Sie Sortieren Sie die Dateien einfach und sofort in Ihrem editor. Es ist wirklich schnell.
Zur Verdeutlichung des Unterschiedes:
Original:
Ergebnisse von YAML::dump :
Ergebnisse von i18n_yaml_sorter:
some_key: &some_name
zu_some_key: &some_name
und Hinzugefügtsome_key: \n <<: *some_name
. (2) Dann zog ich alle Namen die Schlüssel und Ihre Werte an den Anfang der Datei, und die zusätzlichen zahlen, die den Tasten, wo nötig. Beachten Sie, dass diese manuelle Einstellung ist nur erforderlich einmal.https://gist.github.com/1083930 nicht so funktioniert, wie ich es erwartet habe. Tief-Arten NICHT NUR hash-keys, SONDERN AUCH hash-Werte. In meinen Anwendungsfällen, in denen sich der tiefen-Sortierung hash erforderlich ist, der hash ist immer ein Baum, wo die Tasten sind die Beschriftungen und Werte sind (sub) - Bäume (, wenn hashes) oder Blätter (sonst). Ich brauche zu tief-nur Sortieren die Beschriftungen der Bäume.
Habe ich diese
mit diesem
UPDATE April 2014:
Mit Rails 3.2.13, Ruby 1.9.3p489:
Habe ich nur verwendet, die i18n_yaml_sorter gem ( https://github.com/redealumni/i18n_yaml_sorter ).
Einfach hinzufügen, um Ihre Gemfile:
Führen den rake-task zum Sortieren von Gebietsschemas' Dateien:
Funktionierte perfekt, obwohl der Edelstein wurde zuletzt verfasst vor 2 Jahren. Es dauerte 5 Minuten max.
In Ruby 1.8-hashes, die nicht einer bestimmten Reihenfolge, so kann man nicht nur Sortieren.
Könnte man monkey-patch/überschreiben der
to_yaml
Methode derHash
wie diese:Natürlich, die genauen details können abhängig von Ihrer version von YAML/Ruby. Das Beispiel oben ist für die Ruby-1.8.6.
Hier ist eine weitere alternative, für alle anderen, die auf diesen..
Es ist auch ein atom-Paket, das wird es auch tun, https://github.com/akfernun/yaml-sortkeys
Dies könnte eine weitere attraktive option: https://github.com/redealumni/i18n_yaml_sorter
Leider
YAML::quick_emit
wurde als veraltet markiert und wird nicht mehr in neueren builds von der Psych-gem. Wenn Sie möchten, dass Ihre hash-Schlüssel sortiert werden, wenn Sie serialisiert zu yaml, Sie müssen verwenden Sie die folgende monkey patch statt: