Posted June 15, 2015
En discutant avec Robotophe, j’ai écrit un court guide expliquant comment je construis de manière automatique mes archives de traduction que vous pouvez trouver par ici :
https://www.gog.com/mix/archives_de_traduction_francaises
Je me suis dit que ça pourrait intéresser d’autres personnes, alors je partage ce guide ici.
Il est écrit pour Linux, mais devrait pouvoir être adapté sous Windows si vous connaissez bien le fonctionnement de sa console.
-----
Alors voici ma méthode pour créer une archive de traduction à partir de deux versions différentes d’un même jeu. Elle utilise pas mal de "logique" interne à Bash (plus généralement au shell quel qu’il soit), alors n’hésite pas à demander des explications sur ce qui n’est pas clair.
Je vais poser comme hypothèse un répertoire '~/jeu-fr/' contenant la version française du jeu, et un répertoire '~/jeu-en/' contenant la version anglaise.
Une première boucle va me permettre de renommer tous les fichiers en lettres minuscules uniquement pour éviter par exemple que par la suite une boucle ne trouve pas "fichier" parce qu’il se nomme "Fichier".
La boucle pour passer tout le contenu d’un répertoire en lettres minuscules :
Tu peux le tester en en copiant le contenu dans ~/jeu-en/, en écrasant au passage les fichiers déjà en place, puis en lançant le jeu qui se trouve sous ~/jeu-en/. Si tout va bien celui-ci est maintenant en français.
https://www.gog.com/mix/archives_de_traduction_francaises
Je me suis dit que ça pourrait intéresser d’autres personnes, alors je partage ce guide ici.
Il est écrit pour Linux, mais devrait pouvoir être adapté sous Windows si vous connaissez bien le fonctionnement de sa console.
-----
Alors voici ma méthode pour créer une archive de traduction à partir de deux versions différentes d’un même jeu. Elle utilise pas mal de "logique" interne à Bash (plus généralement au shell quel qu’il soit), alors n’hésite pas à demander des explications sur ce qui n’est pas clair.
Je vais poser comme hypothèse un répertoire '~/jeu-fr/' contenant la version française du jeu, et un répertoire '~/jeu-en/' contenant la version anglaise.
Une première boucle va me permettre de renommer tous les fichiers en lettres minuscules uniquement pour éviter par exemple que par la suite une boucle ne trouve pas "fichier" parce qu’il se nomme "Fichier".
La boucle pour passer tout le contenu d’un répertoire en lettres minuscules :
find ~/jeu-fr/ -depth | while read file; do
newfile="$(dirname "$file")/$(basename "$file" | tr [:upper:] [:lower:])"
if [ "$newfile" != "$file" ]; then
mv "$file" "$newfile"
fi
done
Qu’on répète bien sûr sur le second répertoire : newfile="$(dirname "$file")/$(basename "$file" | tr [:upper:] [:lower:])"
if [ "$newfile" != "$file" ]; then
mv "$file" "$newfile"
fi
done
find ~/jeu-en/ -depth | while read file; do
newfile="$(dirname "$file")/$(basename "$file" | tr [:upper:] [:lower:])"
if [ "$newfile" != "$file" ]; then
mv "$file" "$newfile"
fi
done
Voilà, maintenant les seules différences de contenu entre ~/jeu-fr/ et ~/jeu-en/ sont les fichiers qui ont besoin d’être intégrés à l’archive de traduction. Comme on est maintenant certains que les fichiers sont nommés de la même façon des deux côtés, on peut automatiser la recherche des fichiers différents : newfile="$(dirname "$file")/$(basename "$file" | tr [:upper:] [:lower:])"
if [ "$newfile" != "$file" ]; then
mv "$file" "$newfile"
fi
done
cd ~/jeu-fr/
find . -type f | while read file; do
diff -q "$file" ~/jeu-en/"$file"
done
Bon, la liste des fichier a défilé, mais elle est peut-être trop longue pour être exploitée telle quelle sans y passer des jours, on va donc automatiser encore un peu la suite. À commencer par en enregistrer la liste dans un fichier '~/liste-diffs.txt' : find . -type f | while read file; do
diff -q "$file" ~/jeu-en/"$file"
done
cd ~/jeu-fr/
find . -type f | while read file; do
if [ -n "$(diff -q "$file" ~/jeu-en/"$file" 2>&1)" ]; then
echo "$file" >> ~/liste-diffs.txt
fi
done
Et voilà, la liste des fichiers à récupérer se trouve maintenant prête à être exploitée dans le fichier ~/liste-diffs.txt, mais on ne veut toujours pas se la farcir à la main ! Aucun problème, la suite va de nouveau être automatique. Après rapide vérification que le contenu de ce fichier est cohérent, on va plutôt que de se contenter de lister les fichiers différents directement les copier dans un nouveau répertoire '~/patchfr/' : find . -type f | while read file; do
if [ -n "$(diff -q "$file" ~/jeu-en/"$file" 2>&1)" ]; then
echo "$file" >> ~/liste-diffs.txt
fi
done
mkdir ~/patchfr/
cd ~/jeu-fr/
find . -type f | while read file; do
if [ -n "$(diff -q "$file" ~/jeu-en/"$file" 2>&1)" ]; then
cp -l --parents "$file" ~/patchfr/
fi
done
C’est prêt ! Le répertoire ~/patchfr/ contient tout le nécessaire à passer le jeu en anglais. cd ~/jeu-fr/
find . -type f | while read file; do
if [ -n "$(diff -q "$file" ~/jeu-en/"$file" 2>&1)" ]; then
cp -l --parents "$file" ~/patchfr/
fi
done
Tu peux le tester en en copiant le contenu dans ~/jeu-en/, en écrasant au passage les fichiers déjà en place, puis en lançant le jeu qui se trouve sous ~/jeu-en/. Si tout va bien celui-ci est maintenant en français.
Post edited July 16, 2015 by vv221