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);
signature.asc
Description: Digital signature