tags 416822 pending thanks > Actually, the file I sent is encoded in GBK. It's the first time I > translate PO file under MS Windows whose default keyboard-coding-system is > Chinese GBK. But I did check it using `msgfmt -v -v -v' before submitting, > and msgfmt complained nothing. Weird... My fault again. 8-( Yep. Sometimes, msgfmt does not complain when encoding issues are involved. Attached is my "po_test" script. It needs the relevant POT file to be in the current directory, then it merges the PO file with it after checking the encoding. Anyway, the new file is committed in my branch.
#!/bin/sh
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