#!/bin/sh
# $Id: sync_lang.sh,v 2.22 2005/12/07 23:03:46 nijel Exp $
##
# Shell script that synchronises all translations in phpMyAdmin
##
# Any parameters (except --iconv/--recode) will be passed to grep to filter
# processed translation, for example: './sync_lang.sh czech' will process only
# czech translation, './sync_lang.sh -e czech -e english' will process czech
# and english translations.
##
# Written by Michal Cihar <nijel at users.sourceforge.net>
##
# Changes:
# 2005-12-08
# * less verbose output to allow quick overview
# 2005-11-29
# * hack for multibyte chars, so that \'; at the end will not fool PHP
# 2004-09-22
# * default to iconv, as it doesn't break things as recode does
# 2004-09-03
# * hack for hebrew
# 2003-11-18
# * switch php3 -> php
# 2003-04-14
# * convert only files that are needed to convert (checks mtime), --force to
# avoid this checking
# * get charset from filename when reading from file failed
# * report failed translations at the end
# 2002-09-18
# * now accepts parameters --iconv/--recode for specifying which convertor
# to use
# 2002-08-13
# * support for synchronisation only for selected language(s)
# 2002-07-18
# * can exclude some languages from conversion
# 2002-07-17
# * support for multiple convertors (recode added)
##
##
# convertor setup
##
# CONVERTOR_PARAMS is used for printf and it also receives two params: source
# and target charset
#
case "$1" in
--iconv)
echo Using iconv on user request
CONVERTOR=iconv
# the space on following is REQUIRED
CONVERTOR_PARAMS=" -f %s -t %s"
shift
;;
--recode)
echo Using recode on user request
echo '(please use iconv for arabic)'
CONVERTOR=recode
CONVERTOR_PARAMS=" -f %s..%s"
shift
;;
*)
echo Using iconv as default, force with --iconv/--recode
CONVERTOR=iconv
# the space on following is REQUIRED
CONVERTOR_PARAMS=" -f %s -t %s"
;;
esac
if [ "$1" = "--force" ] ; then
FORCE=1
shift
else
FORCE=0
fi
##
# names of translations to process
##
# Here should be listed all translations for which conversion should be done.
# The name is filename without inc.php.
#
BASE_TRANSLATIONS="afrikaans-iso-8859-1
albanian-iso-8859-1
arabic-windows-1256
azerbaijani-iso-8859-9
basque-iso-8859-1
belarusian_cyrillic-windows-1251
belarusian_latin-utf-8
bosnian-windows-1250
brazilian_portuguese-iso-8859-1
bulgarian-utf-8
catalan-iso-8859-1
chinese_traditional-utf-8
chinese_simplified-gb2312
croatian-iso-8859-2
czech-utf-8
danish-iso-8859-1
dutch-iso-8859-1
english-iso-8859-1
estonian-iso-8859-1
finnish-iso-8859-1
french-iso-8859-1
galician-iso-8859-1
german-utf-8
greek-iso-8859-7
hebrew-iso-8859-8-i
hungarian-iso-8859-2
indonesian-iso-8859-1
italian-iso-8859-1
japanese-utf-8
korean-euc-kr
latvian-windows-1257
lithuanian-windows-1257
malay-iso-8859-1
norwegian-iso-8859-1
persian-windows-1256
polish-iso-8859-2
portuguese-iso-8859-1
romanian-iso-8859-1
russian-windows-1251
serbian_cyrillic-windows-1251
serbian_latin-windows-1250
slovenian-iso-8859-2
slovak-iso-8859-2
spanish-iso-8859-1
swedish-iso-8859-1
tatarish-iso-8859-9
thai-tis-620
turkish-utf-8
ukrainian-windows-1251"
##
# which translations should not be translated to utf-8
##
# List here any translation that should not be converted to utf-8. The name is
# same as above.
#
IGNORE_UTF=""
##
# which translations should not be automatically generated
##
# List here any translation should not be automatically generated from base
# translation for that language (usually for those which are not correctly
# supported by convertor).
#
IGNORE_TRANSLATIONS="
russian-cp-866"
##
# end of configuration, you hopefully won't need to edit anything bellow
##
TEMPFILE=`mktemp /tmp/pma-sync-lang.XXXXXX`
cleanup() {
rm -f $TEMPFILE
}
trap cleanup INT ABRT TERM
FAILED=""
echo "-------------------------------------------------------------------"
# go through all file we should process
for base in $BASE_TRANSLATIONS ; do
if [ "$#" -gt 0 ] ; then
if ( echo $base | grep -q "$@" ) ; then
true
else
continue
fi
fi
# grep language from basename
lang=$(echo $base|sed 's%-.*%%')
# which files will we create from current?
create_files=$(ls --color=none -1 $lang*.inc.php|grep -v $base.inc.php)
for ignore in $IGNORE_TRANSLATIONS ; do
create_files=$(echo "$create_files" | grep -v $ignore)
done
# charset of source file
src_charset=$(grep '\$charset' $base.inc.php | sed "s%^[^'\"]*['\"]\\([^'\"]*\\)['\"][^'\"]*$%\\1%")
replace_charset=$src_charset
# special case for hebrew
if [ $src_charset = 'iso-8859-8-i' ] ; then
src_charset=iso-8859-8
fi
echo -n "$base [charset $src_charset]"
# do we already have utf-8 translation?
if [ $src_charset = 'utf-8' ] ; then
is_utf=yes
else
is_utf=no
fi
# at first update existing translations
for file in $create_files ; do
# charset of destination file
# grepping from file causes problems when it is empty...
charset=$(grep '\$charset' $file | sed "s%^[^'\"]*['\"]\\([^'\"]*\\)['\"][^'\"]*$%\\1%")
if [ -z "$charset" ] ; then
charset=$(echo $file | sed -e 's/^[^-]*-//' -e 's/\.inc\.php\?$//')
fi
if [ $charset = 'utf-8' ] ; then
is_utf=yes
fi
# check whether we need to update translation
if [ ! "$base.inc.php" -nt "$file" -a "$FORCE" -eq 0 -a -s "$file" ] ; then
echo -n " ($file:ok)"
continue
fi
echo -n " ($file:to $charset:"
if [ $charset = 'utf-8' ] ; then
# if we convert to utf-8, we should add allow_recoding
is_utf=yes
$CONVERTOR $(printf "$CONVERTOR_PARAMS" $src_charset $charset) < $base.inc.php| sed -e "s/$replace_charset/$charset/" -e '/\$charset/a\
$allow_recoding = TRUE;' > $TEMPFILE
elif [ $src_charset = 'utf-8' ] ; then
is_utf=yes
# if we convert from utf-8, we should remove allow_recoding
$CONVERTOR $(printf "$CONVERTOR_PARAMS" $src_charset $charset) < $base.inc.php| grep -v allow_recoding | sed "s/$replace_charset/$charset/" > $TEMPFILE
else
# just convert
$CONVERTOR $(printf "$CONVERTOR_PARAMS" $src_charset $charset) < $base.inc.php| sed "s/$replace_charset/$charset/" > $TEMPFILE
fi
if [ -s $TEMPFILE ] ; then
sed "s/\\\\';[[:space:]]*$/\\\\\\\\';/" $TEMPFILE > $file
echo -n 'done)'
else
FAILED="$FAILED $file"
echo -n 'FAILED)'
fi
done
# now check whether we found utf-8 translation
if [ $is_utf = no ] ; then
if ( echo $IGNORE_UTF | grep -q $base ) ; then
# utf-8 should not be created
true
else
# we should create utf-8 translation
charset=utf-8
file=$lang-$charset.inc.php
echo -n " [$file:$charset:"
$CONVERTOR $(printf "$CONVERTOR_PARAMS" $src_charset $charset) < $base.inc.php| sed -e "s/$replace_charset/$charset/" -e '/\$charset/a\
$allow_recoding = TRUE;' > $TEMPFILE
if [ -s $TEMPFILE ] ; then
cat $TEMPFILE > $file
echo -n 'done)'
else
FAILED="$FAILED $file"
echo -n 'FAILED)'
fi
fi
fi
echo
done
echo "-------------------------------------------------------------------"
if [ -z "$FAILED" ] ; then
echo "Everything seems to went okay"
else
echo "!!!SOME CONVERSION FAILED!!!"
echo "Following file were NOT updated:"
echo
echo "$FAILED"
echo
echo "!!!SOME CONVERSION FAILED!!!"
fi
cleanup