mirror of
https://github.com/torproject/webwml.git
synced 2024-11-30 21:20:24 +00:00
252 lines
7.4 KiB
Bash
Executable File
252 lines
7.4 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Author: Runa Sandvik, <runa.sandvik@gmail.com>
|
|
# Google Summer of Code 2009
|
|
#
|
|
# This is Free Software (GPLv3)
|
|
# http://www.gnu.org/licenses/gpl-3.0.txt
|
|
#
|
|
# This script will convert all of the English wml files in
|
|
# https://svn.torproject.org/svn/website/trunk/ to pot files, and
|
|
# keep them updated. The script will also convert subdirectories that
|
|
# exist in the website module.
|
|
#
|
|
# For more information, see the HOWTO and README in
|
|
# translation/tools/gsoc09.
|
|
#
|
|
|
|
### start config ###
|
|
|
|
# Location of the wml files
|
|
wmldir="$PWD"
|
|
|
|
# Location of the pot files.
|
|
# Assuming that the translation directory is relative to the website
|
|
podir="`dirname $wmldir`/translation/projects/website/po/templates"
|
|
|
|
# Set the copyright holder of the files,
|
|
# for example "The Tor Project, Inc"
|
|
copyright="The Tor Project, Inc"
|
|
|
|
# A lot of the wml files have custom tags. These tags have been defined
|
|
# in website/include/versions.wmi. Tags that people usually forget to close,
|
|
# as well as tags that are not defined in versions.wmi, have been added.
|
|
# See: https://svn.torproject.org/svn/website/trunk/include/versions.wmi
|
|
customtag=`echo $(cat "$wmldir/include/versions.wmi" | awk '{ printf "<%s> " , $2 }' | sed 's/<>//g') "<svnsandbox> <svnwebsite> <svnprojects> <input> <hr> <br> <img> <gitblob> <package-androidbundle-alpha> <version-androidbundle-tor> <video controls> <wiki>"`
|
|
|
|
# We also need to use the nodefault option of po4a; space separated list
|
|
# of tags that the module should not try to set by default in any
|
|
# category. For now, we only need the input tag.
|
|
nodefault='<input>'
|
|
|
|
# The script can write the name of unprocessed files to a log.
|
|
# If you want to enable this option, set the logfile here.
|
|
logfile="/home/runa/tor/wml2po.log"
|
|
|
|
# This is the temp logfile. Leave this line even if you don't want to
|
|
# log. This will be deleted when the script is done.
|
|
tmplog="`dirname $wmldir`/tmp.log"
|
|
|
|
### end config ###
|
|
|
|
# Create a lockfile to make sure that only one instance of the script
|
|
# can run at any time.
|
|
LOCKFILE=wml2po.lock
|
|
|
|
if lockfile -! -l 60 -r 3 "$LOCKFILE";
|
|
then
|
|
echo "unable to acquire lock" >2
|
|
exit 1
|
|
fi
|
|
|
|
trap "rm -f '$PWD/$LOCKFILE'" exit
|
|
|
|
# Check if translation/projects/website exist, i.e. has been checked out
|
|
if [ ! -d $podir ]
|
|
then
|
|
echo "Have you remembered to check out translation/projects/website?"
|
|
exit 1
|
|
fi
|
|
|
|
# If the logfile is set, write the date.
|
|
if [ $logfile ]
|
|
then
|
|
echo `date` > $logfile
|
|
fi
|
|
|
|
# Create the temp log
|
|
touch $tmplog
|
|
|
|
# We only need the English wml files, but we do not wish to translate
|
|
# the eff documents.
|
|
wml=`find $wmldir -regex '^'$wmldir'/.*en/.*\.wml' -type f | grep -v '^'$wmldir'/eff'`
|
|
|
|
# For every English wml, see if the pot needs to be created or updated
|
|
for file in $wml ; do
|
|
|
|
# Get the basename of the file we are dealing with
|
|
wmlfile=`basename $file`
|
|
|
|
# Get the translation priority
|
|
priority=`cat $file | grep "# Translation-Priority" | awk '{print $3}'`
|
|
|
|
# If the file doesn't have a translation-priority, we can assume
|
|
# that it doesn't need to be translated. Skip this file and
|
|
# continue on with the next.
|
|
if [ ! $priority ]
|
|
then
|
|
continue
|
|
fi
|
|
|
|
# Strip the file for its original extension and add .pot
|
|
pofile="$priority.${wmlfile%%.*}.pot"
|
|
|
|
# Find out what directory the file is in.
|
|
# Also, remove the part of the path that is $wmldir
|
|
indir=`dirname $file`
|
|
|
|
# We need to know what one dir up is
|
|
onedirup=`dirname $indir | sed "s#$wmldir/##"`
|
|
|
|
# We need to have the correct, full path to the pot
|
|
# directory for the file we are working on.
|
|
# Also, did the subdirectory exist prior to running this
|
|
# script? If not, create it now and add it to the
|
|
# repository.
|
|
if [ $onedirup = $wmldir ]
|
|
then
|
|
popath="$podir"
|
|
else
|
|
|
|
# We need to know if a subdirectory, such as torbutton,
|
|
# exist in the translation module. If it does not exist,
|
|
# the script will create it in all the directories under
|
|
# translation/projects/website (excluding .svn)
|
|
subdir=`find "$podir" -maxdepth 1 -type d ! -path "$ppodir" ! -path "*\.*"`
|
|
|
|
for dir in $subdir ; do
|
|
if [ ! -d "$podir/$onedirup" ]
|
|
then
|
|
svn mkdir "$podir/$onedirup"
|
|
fi
|
|
done
|
|
|
|
# Set the path
|
|
popath="$podir/$onedirup"
|
|
|
|
fi
|
|
|
|
# Check to see if the pot existed prior to running this
|
|
# script. If it didn't, check if there any files with the same
|
|
# filename, but different priority. If neither of the files
|
|
# exist, create with po4a-gettextize.
|
|
if [ -e "$popath/$pofile" ]
|
|
then
|
|
poexist=1
|
|
elif [ `find $popath -type f -name "*.$filename" | wc -l` -gt "0" ]
|
|
then
|
|
poexist=2
|
|
|
|
# We need to rename the other file
|
|
for file in `find $popath -type f -name "*.$filename"` ; do
|
|
svn mv "$file" "$popath/$pofile"
|
|
echo "$popath/$pofile" > $tmplog
|
|
done
|
|
|
|
else
|
|
poexist=0
|
|
fi
|
|
|
|
# If the pot file does not exist, convert it with
|
|
# po4a-gettextize, set the right encoding and charset
|
|
# and the correct copyright.
|
|
if [ $poexist = 0 ]
|
|
then
|
|
# Convert it
|
|
po4a-gettextize -f wml -m "$file" -p "$popath/$pofile" --master-charset utf-8 -o customtag="$customtag" -o nodefault="$nodefault"
|
|
|
|
# Check to see if the file exists
|
|
if [ -e "$popath/$pofile" ]
|
|
then
|
|
# We don't want files without
|
|
# content, so check the file first.
|
|
content=`cat "$popath/$pofile" | grep '^#[.]' | wc -l`
|
|
|
|
# If the file does not have any
|
|
# content, delete it.
|
|
if [ $content = 0 ]
|
|
then
|
|
rm -f "$popath/$pofile"
|
|
echo "$popath/$pofile" > $tmplog
|
|
else
|
|
# Set the right encoding and charset, as well
|
|
# as the correct copyright holder.
|
|
sed -i '0,/ENCODING/ s/ENCODING/8bit/' "$popath/$pofile"
|
|
sed -i '0,/CHARSET/ s/CHARSET/utf-8/' "$popath/$pofile"
|
|
sed -i "0,/Free Software Foundation, Inc/ s/Free Software Foundation, Inc/$copyright/" "$popath/$pofile"
|
|
|
|
# And add it to the repository
|
|
svn add "$popath/$pofile"
|
|
echo "$popath/$pofile" > $tmplog
|
|
fi
|
|
fi
|
|
|
|
# Update the file with po4a-updatepo to make the
|
|
# word wrapping perfect
|
|
po4a-updatepo -f wml -m "$file" -p "$popath/$pofile" --master-charset utf-8 -o customtag="$customtag" -o nodefault="$nodefault"
|
|
|
|
# Delete the backup
|
|
rm -f "$popath/$pofile~"
|
|
fi
|
|
|
|
# If the pot file does exist, calculate the hash first,
|
|
# then update the file, then calculate the hash again.
|
|
if [ $poexist = 1 ]
|
|
then
|
|
# Calculate the hash before we update the file
|
|
before=`grep -vE '^("POT-Creation-Date:|#)' "$popath/$pofile" | md5sum | cut -d " " -f1`
|
|
|
|
# Update the pot file
|
|
po4a-updatepo -f wml -m "$file" -p "$popath/$pofile" --master-charset utf-8 -o customtag="$customtag" -o nodefault="$nodefault"
|
|
|
|
# Calculate the new hash
|
|
after=`grep -vE '^("POT-Creation-Date:|#)' "$popath/$pofile" | md5sum | cut -d " " -f1`
|
|
|
|
# Delete the backup
|
|
rm -f "$popath/$pofile~"
|
|
|
|
# Now we need to compare the before and after
|
|
# hash. If they match (i.e. nothing has
|
|
# changed), revert the file.
|
|
if [ $before = $after ]
|
|
then
|
|
svn revert "$popath/$pofile"
|
|
echo "$popath/$pofile" > $tmplog
|
|
else
|
|
echo "$popath/$pofile" > $tmplog
|
|
fi
|
|
fi
|
|
|
|
# If a file with the same name but different priority
|
|
# exist, then rename the file (we have done so already)
|
|
# and update it with po4a-updatepo to make sure
|
|
# everything else is ok.
|
|
if [ $poexist = 2 ]
|
|
then
|
|
# Update the file
|
|
po4a-updatepo -f wml -m "$file" -p "$popath/$pofile" --master-charset utf-8 -o customtag="$customtag" -o nodefault="$nodefault"
|
|
fi
|
|
|
|
# Write to the logfile
|
|
if [ -e $logfile ]
|
|
then
|
|
if [ `cat $tmplog | grep "$popath/$pofile" | wc -l` -eq "0" ]
|
|
then
|
|
echo "could not process: " "$file" >> $logfile
|
|
fi
|
|
fi
|
|
|
|
# Delete the temp log
|
|
rm -f $tmplog
|
|
done
|