[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [BTS #724300] po-debconf://snort/fr.po



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


Reply to: