Quoting JP Guillonneau (guillonneau.jeanpaul@free.fr): > BTS envoyé, Bon, il restait un petit bug de "variable matching" entre une chaîne et se traduction, que j'ai trouvé avec "mon" script magique de contrôle. J'ai envoyé la correction dans le BTS. Pour ceux que ça intéresse, "po_test" est attaché à ce mail avec le check_var.pl écrit en son temps par Denis Barbier, en jargon perloïde.
#!/bin/sh # # Sync a PO file with a POT file # test its charset # check its validity # # Copyright © 2006-2008 Christian Perrier <bubulle@debian.org> # Copyright © 2006 Denis Barbier <barbier@debian.org> temp=`tempfile` trap "rm -f $temp $temp.new" 1 2 3 15 clean_and_die() { rm -f $temp $temp.new if [ "$1" = "2" ] ; then echo Invalid encoding. Please check the file. fi exit $1 } if [ -z $1 ] then echo Usage $0 fichier clean_and_die 1 fi if [ ! -f $1 ] then echo $1 not found. clean_and_die 1 fi if [ `ls -1 *\.pot 2>/dev/null | wc -l` != "1" ] ; then echo No POT file \(or more than one\) in current directory clean_and_die 1 fi potfile=`ls -1 *\.pot` msgmerge -U --previous $1 $potfile if msgcat $1 >$temp; then mv $temp $1 fi enc=$(grep -E "^\"Content-Type" $1 | cut -f2 -d= | sed 's/\\n\"//g') echo -n "Charset is $enc. Stats: " if test -n "$enc" ; then iconv -f $enc -t UTF-8 $1 >$temp >/dev/null 2>&1 || clean_and_die 2 if [ -x $HOME/bin/check_var.pl ] ; then $HOME/bin/check_var.pl $1 || clean_and_die 3 else echo $HOME/bin/check_var.pl not found clean_and_die 1 fi LC_ALL=C msgfmt -c -v -o /dev/null --statistics $1 chmod 644 $1 fi clean_and_die 0
#! /usr/bin/perl sub getVars { my $text = shift; my $var = ''; while ($text =~ m/\G.*?(\$\{[^{}]+\})/g) { $var .= $1; } return $var; } $/ = "\n\n"; open (PO, "< $ARGV[0]") or die "Unable to open $ARGV[0]: $!\n"; while (<PO>) { s/"\n"//g; (my $msgid) = m/^msgid "(.*)"$/m; (my $msgstr) = m/^msgstr "(.*)"$/m; next if $msgstr eq '' || m/^#, .*fuzzy/m; my $var1 = getVars($msgid); my $var2 = getVars($msgstr); print if $var1 ne $var2; } close (PO);
Attachment:
signature.asc
Description: Digital signature