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

Bug#416822: apt: [INTL:zh_CN] Updated Simplified Chinese translation for APT



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


Reply to: