[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] r20321: {} put the scripts in website (website/trunk)
Author: runa
Date: 2009-08-16 04:11:41 -0400 (Sun, 16 Aug 2009)
New Revision: 20321
Added:
website/trunk/po2wml.sh
website/trunk/wml2po.sh
Log:
put the scripts in website
Copied: website/trunk/po2wml.sh (from rev 20299, translation/trunk/tools/gsoc09/po2wml.sh)
===================================================================
--- website/trunk/po2wml.sh (rev 0)
+++ website/trunk/po2wml.sh 2009-08-16 08:11:41 UTC (rev 20321)
@@ -0,0 +1,131 @@
+#!/bin/bash
+#
+# Author: Runa Sandvik, <runa.sandvik@xxxxxxxxx>
+# Google Summer of Code 2009
+#
+# This is Free Software (GPLv3)
+# http://www.gnu.org/licenses/gpl-3.0.txt
+#
+# This script will convert all the translated po files back to wml
+# files.
+#
+# For more information, see the HOWTO and README in
+# translation/tools/gsoc09.
+#
+
+### start config ###
+
+# Location of the wml files
+wmldir="$PWD"
+
+# Location of the po files,
+podir="`dirname $wmldir`/translation/projects/website"
+
+# 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> <input> <hr> <br> <img>"`
+
+# 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>'
+
+### end config ###
+
+# Create a lockfile to make sure that only one instance of the script
+# can run at any time.
+LOCKFILE=po2wml.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
+
+# cd to the right directory so we can commit the files later
+cd "$wmldir"
+
+# We need to find the po files
+po=`find $podir -regex '^'$podir'/.*/.*\.po' -type f`
+
+# For every wml, update po
+for file in $po ; do
+
+ # Get the basename of the file we are dealing with
+ pofile=`basename $file`
+
+ # Strip the file for its original extension and the translation
+ # priority, and add .wml
+ wmlfile="`echo $pofile | cut -d . -f 2`.wml"
+
+ # Find out what directory the file is in.
+ indir=`dirname $file`
+
+ # We also need to know what one directory up is
+ onedirup=`dirname $indir`
+
+ # We need to find out what subdirectory we are in
+ subdir=`dirname $file | sed "s#$onedirup/##"`
+
+ # And which language we are dealing with
+ lang=`dirname $indir | sed "s#$podir/##"`
+
+ # Time to write the translated wml file.
+ # The translated document is written if 80% or more of the po
+ # file has been translated.
+ # Example: Use '-k 21' to set this number down to 21%.
+
+ # The nice thing with po4a-translate is that it will only write
+ # the translated document if 80% or more has been translated.
+ # But it will delete the wml if less than 80% has been
+ # translated. To avoid having our current, translated wml files
+ # deleted, we first convert the po to a temp wml. If this file
+ # was written, we'll rename it.
+
+ # If $onedirup is equal to $lang, that means we do not have a
+ # subdirectory. Also, we don't want to convert english po back
+ # to english wml.
+ if [ $onedirup == $lang ]
+ then
+ # The location of the english wml file
+ english="$wmldir/en/$wmlfile"
+
+ # Convert everything but the english po files
+ if [ $subdir != "en" ]
+ then
+ po4a-translate -f wml -m "$english" -p "$file" -l "$wmldir/$subdir/tmp-$wmlfile" --master-charset utf-8 -L utf-8 -o customtag="$customtag" -o nodefault="$nodefault"
+
+ # Check to see if the file was written
+ if [ -e "$wmldir/$subdir/tmp-$wmlfile" ]
+ then
+ mv "$wmldir/$subdir/tmp-$wmlfile" "$wmldir/$subdir/$wmlfile"
+ fi
+ fi
+ else
+ # The location of the english wml file
+ english="$wmldir/$subdir/en/$wmlfile"
+
+ # Convert everything but the english po files
+ if [ $lang != "en" ]
+ then
+ po4a-translate -f wml -m "$english" -p "$file" -l "$wmldir/$subdir/$lang/tmp-$wmlfile" --master-charset utf-8 -L utf-8 -o customtag="$customtag" -o nodefault="$nodefault"
+
+ # Check to see if the file was written
+ if [ -e "$wmldir/$subdir/$lang/tmp-$wmlfile" ]
+ then
+ mv "$wmldir/$subdir/$lang/tmp-$wmlfile" "$wmldir/$subdir/$lang/$wmlfile"
+ fi
+ fi
+ fi
+done
Copied: website/trunk/wml2po.sh (from rev 20301, translation/trunk/tools/gsoc09/wml2po.sh)
===================================================================
--- website/trunk/wml2po.sh (rev 0)
+++ website/trunk/wml2po.sh 2009-08-16 08:11:41 UTC (rev 20321)
@@ -0,0 +1,246 @@
+#!/bin/bash
+#
+# Author: Runa Sandvik, <runa.sandvik@xxxxxxxxx>
+# 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 to pot files and
+# keep them updated.
+#
+# 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/templates"
+
+# Set the copyright holder of the pot 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> <input> <hr> <br> <img>"`
+
+# 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=""
+
+# 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
+
+# cd to the right directory so we can commit the files later
+cd "$podir"
+
+# 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 wml, update po
+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 parth 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/$dir"
+
+ # Check if the directory exists. If it doesn't,
+ # create it
+ if [ ! -d "$podir/$dir" ]
+ then
+ svn mkdir "$podir/$dir"
+ fi
+ else
+ popath="$podir/$dir/$onedirup"
+
+ # Check if the directory exists. If it doesn't,
+ # create it.
+ if [ ! -d "$podir/$dir/$onedirup" ]
+ then
+ svn mkdir "$podir/$dir/$onedirup"
+ fi
+ fi
+
+ # Check to see if the pot file 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
+ 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
+
+ # If you want the script to commit the files automatically,
+ # uncomment the following line.
+ # svn ci -m 'automatically generated and updated the pot files'