Il y a deux fichiers YAML de Ruby On Rails sur les rails. Un fichier est complet et un autre est avec des clés manquantes. Comment puis-je comparer deux fichiers YAML et voir les touches manquantes dans le deuxième fichier? Y a-t-il des outils pour le faire? P>
4 Réponses :
en supposant que maintenant p> file1 code> est la version appropriée et
File2 code> est la version avec des touches manquantes:
compare_yaml_hash(YAML.load_file("file1"), YAML.load_file("file2"))
Cela échoue également si vous comparez deux fichiers locaux normaux. Supprimez le préfixe de la langue en haut des fichiers avant de les comparer pour résoudre ce problème.
@ D-PIXIE - Pour comparer les fichiers locaux: Console de rails; I18n.Translate (: foo); en = i18n.backend.send (: traductions) [: fr]; de = i18n.backend.send (: Traductions) [: DE]; Comparez_yaml_hash (EN, DE, []) CODE>. Le
Traduire (: FOO) code> est de le forcer à charger des traductions. Avec la fonction montrée, il y aura beaucoup de "inadéquation de la valeur clé" pour différentes langues; Commenter cette ligne si vous vous souciez que de clés manquantes. Également le courir dans l'autre sens.
En fait, gratter avec i18n.backend code> - il peut avoir des clés qui ne figurent pas dans les fichiers que vous souhaitez comparer.
@Nathanlong ouais, i18n est un peu délicat quand il s'agit de cela;) Bon général Idéa cependant. Cela fonctionnera si vous n'avez qu'un seul fichier de traduction ou si vous souhaitez comparer toutes les localités de toute façon. Également une bonne tache sur la "inadéquation de la valeur clé", c'est un peu irritant lorsque vous n'avez besoin que des clés ... Il y a aussi le i18n.backend.send (: init_translations) code> pour forcer i18n à initialiser, Au lieu de
i18n.Translate (: foo) code>, ymmw.
@HARISH SHETY..Le code ci-dessus est bon mais j'ai besoin du même code pour comparer 2 fichiers YAML et remplir les paramètres par défaut où les touches sont manquantes dans Python.Can vous, donnez une suggestion ici..Je ne comprend pas comment écrire une fonction pour Ceci dans une classe de Python Lang
Je n'ai pas pu trouver un outil rapide pour le faire. J'ai décidé d'écrire mon outil propre pour cela.
Vous pouvez l'installer avec Cabal: P >
$ yamlkeysdiff file1.yml file2.yml && echo Is the same || echo Is different
Résolution des dépendances ... Cabale: Impossible de résoudre les dépendances: Essayer: YamlKeysdiff-0.5.1 (Objectif utilisateur) Objectif suivant: Base (dépendance de YamLkeysdiff-0.5.1) Rejetting: base-4.8.2.0 / installé-0d6 ... (Conflit: YamLkeysdiff => Base> = 4.6 && <4.8) Rejeter: Base-4.10.0.0, 4.9.1.0, 4.9.0.0, 4.8.2.0, 4.8.1.0, 4.8.0.0, 4.7.0.2, 4.7.0.1, 4.7.0.0, 4.6.0.1, 4.6.0.0.0, 4.5.0.0, 4.4.0.0, 4.4.0.0, 4.4.0.0, 4.3.1.0, 4.3.0.0, 4.2.0.2, 4.2.0.1, 4.2.0.0, 4.1. 0.0, 4.0.0.0.0, 3.0.3.2, 3.0.3.1 (contrainte globale nécessite une instance installée) Tree de dépendance de manière exhaustive.
Je voulais extraire le diff pour avoir quelque chose à travailler, et l'extrait ici imprime simplement des choses. Donc, ma version renvoie un hachage avec diff. Sa structure reflète les hachages d'origine, mais les valeurs sont des descriptions des différences. J'ai ensuite utilisé à peu près: P> res = deep_hash_diff(YAML.load_file("en.yml"), YAML.load_file("spa.yml"), 'English translation', 'Spanish translation')
puts(res.to_yaml) # for nicer output
DIRAFT strong> compare deux fichiers YAML et imprime les touches manquantes dans la seconde Fichier. Il appartient à la fois en tant que bibliothèque et en tant qu'outil de ligne de commande. Vous pouvez installer ce dernier avec GEM Installez DIFFERZ code>. P> P>
Voulez-vous simplement charger les fichiers YAML et iTERER les valeurs? Semble assez facile, je me demande simplement s'il y a quelque chose qui me manque.
Je pensais peut-être qu'il y a déjà fait un outil pour cette tâche?