Lokalizáció/Helyesírás
Az alapvető helyesírási hibák kiszűrésére Bíró Árpád készített egy szkriptet, amely a Hunspell-lel ellenőrzi a SUSE PO-fájljait.
#!/bin/bash
# download and check SUSE localization files
function processtgzfile
{
#$1: tgz filename
#$2: prefix for output filenames
FILELIST=`gzip -d -c "$1" | tar --list 2>/dev/null | grep "\.po$"`
echo "$FILELIST" | while read FILENAME; do echo; echo "$FILENAME";
BASENAME=`basename "$FILENAME"`;
gzip -d -c "$1" | tar -x -O "$FILENAME" 2>/dev/null |\
sed 's/^#.*$//' | sed -e ':a;s/^msgid .*\nmsgstr //;/^msgid /N;//ba' |\
sed -e '/./,$!d;1,/^$/d;s/\&//g' | iconv -c -f UTF-8 -t Latin2 |\
hunspell -d hu_HU -l | sort | uniq > "$2_$BASENAME".problems; done
}
wget --no-check-certificate -c "https://forgesvn1.novell.com/viewsvn/suse-i18n/trunk/lcn/hu/po.tar.gz?view=tar" -O lcn_po.tar.gz
wget --no-check-certificate -c "https://forgesvn1.novell.com/viewsvn/suse-i18n/trunk/yast/hu/po.tar.gz?view=tar" -O yast_po.tar.gz
processtgzfile ./lcn_po.tar.gz lcn
processtgzfile ./yast_po.tar.gz yast
A szkript az aktuális könyvtárba letölt 2 tar.gz-fájlt a SUSE SVN-jéből (lcn és yast - ezeken kívüli fájlok ellenőrzéséhez ki kell egészíteni a szkriptet), majd végignézi azokat a Hunspell-lel és szintén az aktuális
könyvtárba teszi a problémalistákat. Nyilvánvalóan sok a hamis riasztás, de ugyanakkor sok hibát megfog.
szükséges hozzá a hunspell, amely letöltés után egyszerűen telepíthető:
./configure; make; make install
Egy másik parancsfájl hasonló felépítésű, de bővebb funkcionalitású.
#!/bin/bash
function processpofile
{
BASENAME=`basename "$1"`;
cat $1 |\
sed 's/^#.*$//' |\
sed -e ':a;s/^msgid .*\nmsgstr //;/^msgid /N;//ba' |\
sed -e '/./,$!d;1,/^$/d;s/\&//g;s/_//g' |\
iconv -c -f UTF-8 -t Latin2 |\
hunspell -d $DICTIONARY -l |\
iconv -c -t UTF-8 -f Latin2 |\
sort |\
uniq >> "$BASENAME".problems;
}
function processtgzfile
{
FILELIST=`gzip -d -c "$1" | tar --list 2>/dev/null | grep "\.po$"`
echo "$FILELIST" | while read FILENAME; do
echo;
echo "$FILENAME";
BASENAME=`basename "$FILENAME"`;
gzip -d -c "$1" |\
tar -x -O "$FILENAME" 2>/dev/null |\
sed 's/^#.*$//' |\
sed -e ':a;s/^msgid .*\nmsgstr //;/^msgid /N;//ba' |\
sed -e '/./,$!d;1,/^$/d;s/\&//g;s/_//g' |\
iconv -c -f UTF-8 -t Latin2 |\
hunspell -d $DICTIONARY -l |\
iconv -c -t UTF-8 -f Latin2 |\
sort |\
uniq >> "$BASENAME".problems;
done
}
function processdirectory
{
FILELIST=`find $i -name "*.po" -print`;
echo "$FILELIST" | while read FILENAME; do
echo;
echo "$FILENAME";
BASENAME=`basename "$FILENAME"`;
cat $FILENAME |\
sed 's/^#.*$//' |\
sed -e ':a;s/^msgid .*\nmsgstr //;/^msgid /N;//ba' |\
sed -e '/./,$!d;1,/^$/d;s/\&//g;s/_//g' |\
iconv -c -f UTF-8 -t Latin2 |\
hunspell -d $DICTIONARY -l |\
iconv -c -t UTF-8 -f Latin2 |\
sort |\
uniq >> "$BASENAME".problems;
done
}
function usage
{
echo "usage: $0 [-d dictionary] <pofile|directory|tgzfile>"
}
USAGE=0;
TARGET="";
TARGET_SUBJECT=$1;
DICTIONARY=hu_HU
if [[ $# -ne 1 && $# -ne 3 ]]; then
usage;
exit 1;
fi
while getopts d: OPTS; do
case "$OPTS" in
d) DICTIONARY=$OPTARG;
TARGET_SUBJECT=$3;;
[?]) usage;
exit 1;
;;
esac
done
echo Using dictionary: $DICTIONARY
if [ -d $TARGET_SUBJECT ]; then
TARGET="dir";
echo Processing directory;
elif [ `file "$TARGET_SUBJECT" | grep gzip | wc -l` -eq 1 ]; then
#must be a gzipped tar
echo Processing gzipped archive;
TARGET="tgz";
else
#nem tomoritett, nem konyvtar, csak po lehet. ugye?
echo Processing individual po file;
TARGET="po";
fi
case $TARGET in
"po")
processpofile $TARGET_SUBJECT
;;
"dir")
processdirectory $TARGET_SUBJECT
;;
"tgz")
processtgzfile $TARGET_SUBJECT
;;
*)
usage;
exit 1;
;;
esac