git.schokokeks.org
Repositories
Help
Report an Issue
tor-webwml.git
Code
Commits
Branches
Tags
Suche
Strukturansicht:
8f368439c
Branches
Tags
bridges
docs-debian
jobs
master
press-clips
tor-webwml.git
po2wml.sh
updated translations for the website (as wml)
Runa A. Sandvik
commited
8f368439c
at 2011-03-22 16:51:53
po2wml.sh
Blame
History
Raw
#!/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 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/po" # 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>"` # 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 # Validate input and write results to a log file validate_script="`dirname $wmldir`/translation/tools/validate.py" validate_log="`dirname $wmldir`/validate/website-validate.log" python "$validate_script" -i "$file" -l "$validate_log" # 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%. Also, po4a-translate will only write the # translated document if 80% or more has been translated. # However, it will delete the wml if less than 80% has been # translated. To avoid having our current, translated wml files # deleted, convert the po to a temp wml first. If this file was # actually written, rename it to wml. # Convert translations to directories such as website/nb/. function nosubdir { # The location of the english wml file english="$wmldir/en/$wmlfile" # Convert the translated file. Note that po4a will write the file and then delete it if less than 80% has been translated po4a-translate -f wml -m "$english" -p "$file" -l "$wmldir/$subdir/$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/$wmlfile" ] then # Remove last three lines in file sed -i -e :a -e '$d;N;2,3ba' -e 'P;D' "$wmldir/$subdir/$wmlfile" # If the file is mirrors.wml, include mirrors-table.wmi if [ $wmlfile == "mirrors.wml" ] then sed -i 's/<!--PO4ASHARPBEGIN/#/' "$wmldir/$subdir/$wmlfile" sed -i 's/PO4ASHARPEND-->//' "$wmldir/$subdir/$wmlfile" fi # If the file is an Arabic translation, include # the right header, css, menu files and footer if [ $subdir = "ar" ] then # Head orig_head=`grep '#include "head.wmi"' "$wmldir/$subdir/$wmlfile"` temp_head=`echo $orig_head | sed s@head.wmi@ar/head.wmi@` new_head=`echo $temp_head 'STYLESHEET="css/master-rtl.css"'` sed -i "s@$orig_head@$new_head@" "$wmldir/$subdir/$wmlfile" # Side (not all files include this) orig_side=`grep '#include "side.wmi"' "$wmldir/$subdir/$wmlfile"` if [ -n "$orig_side" ] then new_side=`echo '#include "ar/side.wmi"'` sed -i "s@$orig_side@$new_side@" "$wmldir/$subdir/$wmlfile" fi # Info (not all files include this) orig_info=`grep '#include "info.wmi"' "$wmldir/$subdir/$wmlfile"` if [ -n "$orig_info" ] then new_info=`echo '#include "ar/info.wmi"'` sed -i "s@$orig_info@$new_info@" "$wmldir/$subdir/$wmlfile" fi # Footer echo '#include "ar/foot.wmi"' >> "$wmldir/$subdir/$wmlfile" else # Include the English footer echo '#include "foot.wmi"' >> "$wmldir/$subdir/$wmlfile" fi fi } # Convert translations to directories such as website/torbrowser/nb/. # Again, po4a will write the file and then delete it if less than 80% has been translated function subdir { # The location of the english wml file english="$wmldir/$subdir/en/$wmlfile" # Convert the files po4a-translate -f wml -m "$english" -p "$file" -l "$wmldir/$subdir/$lang/$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/$wmlfile" ] then # Remove last three lines in file sed -i -e :a -e '$d;N;2,3ba' -e 'P;D' "$wmldir/$subdir/$lang/$wmlfile" # Remove a specific comment from a specific file if [ $wmlfile == "download-easy.wml" ] then translator_comment="# Translators: please point to the version of TBB in your language, if there is one." sed -i "s/$translator_comment//" "$wmldir/$subdir/$lang/$wmlfile" fi # If the file is an Arabic translation, include the # right header, css, menu files and footer if [ $lang = "ar" ] then # Head orig_head=`grep '#include "head.wmi"' "$wmldir/$subdir/$lang/$wmlfile"` temp_head=`echo $orig_head | sed s@head.wmi@ar/head.wmi@` new_head=`echo $temp_head 'STYLESHEET="css/master-rtl.css"'` sed -i "s@$orig_head@$new_head@" "$wmldir/$subdir/$lang/$wmlfile" # Side (not all files include this) orig_side=`grep '#include "side.wmi"' "$wmldir/$subdir/$lang/$wmlfile"` if [ -n "$orig_side" ] then new_side=`echo '#include "ar/side.wmi"'` sed -i "s@$orig_side@$new_side@" "$wmldir/$subdir/$lang/$wmlfile" fi # Info (not all files include this) orig_info=`grep '#include "info.wmi"' "$wmldir/$subdir/$lang/$wmlfile"` if [ -n "$orig_info" ] then new_info=`echo '#include "ar/info.wmi"'` sed -i "s@$orig_info@$new_info@" "$wmldir/$subdir/$lang/$wmlfile" fi # Footer echo '#include "ar/foot.wmi"' >> "$wmldir/$subdir/$lang/$wmlfile" else # Include the English footer echo '#include "foot.wmi"' >> "$wmldir/$subdir/$lang/$wmlfile" fi fi } # If $onedirup is equal to $lang, that means we do not have a # subdirectory. if [ $onedirup == $lang ] then # If the current subdirectory is "zh_CN" use "zh-cn" instead if [ $subdir = "zh_CN" ] then subdir="zh-cn" nosubdir fi # If the current directory is "nb" use "no" instead if [ $subdir = "nb" ] then subdir="no" nosubdir fi # If the current directory is "sv" use "se" instead if [ $subdir = "sv" ] then subdir="se" nosubdir fi # If the current directory is "pl_PL" use "pl" instead if [ $subdir = "pl_PL" ] then subdir="pl" nosubdir fi # Convert everything else if [[ $subdir != "en" && $subdir != "zh_CN" && $subdir != "nb" && $subdir != "sv" ]] then nosubdir fi else # If the current language is "zh_CN" use "zh-cn" instead if [ $lang = "zh_CN" ] then lang="zh-cn" subdir fi # If the current language is "nb" use "no" instead if [ $lang = "nb" ] then lang="no" subdir fi # If the current language is "sv" use "se" instead if [ $lang = "sv" ] then lang="se" subdir fi # If the current language is "pl_PL" use "pl" instead if [ $lang = "pl_PL" ] then lang="pl" subdir fi # Convert everything else if [[ $lang != "en" && $lang != "zh_CN" && $lang != "nb" && $lang != "sv" ]] then subdir fi fi done