Jonathan Druart
08c03af2ae
Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl> Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
325 lines
7.9 KiB
Bash
Executable file
325 lines
7.9 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
# koha-translate -- Manage Koha translations.
|
|
# Copyright 2013 Tomás Cohen Arazi
|
|
# Universidad Nacional de Córdoba
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
# Read configuration variable file if it is present
|
|
[ -r /etc/default/koha-common ] && . /etc/default/koha-common
|
|
|
|
set -e
|
|
|
|
# include helper functions
|
|
if [ -f "/usr/share/koha/bin/koha-functions.sh" ]; then
|
|
. "/usr/share/koha/bin/koha-functions.sh"
|
|
else
|
|
echo "Error: /usr/share/koha/bin/koha-functions.sh not present." 1>&2
|
|
exit 1
|
|
fi
|
|
|
|
usage()
|
|
{
|
|
local scriptname=$(basename $0)
|
|
|
|
cat <<EOF
|
|
$scriptname
|
|
|
|
This script lets you manage your Koha templates translations.
|
|
|
|
Usage:
|
|
$scriptname --list|-l [--available|-a] [-d|--dev instance]
|
|
$scriptname --check|-c language_code] [-d|--dev instance]
|
|
$scriptname --install|-i language_code] [-d|--dev instance]
|
|
$scriptname --update|-u language_code] [-d|--dev instance]
|
|
$scriptname --remove|-r language_code] [-d|--dev instance]
|
|
$scriptname --help|-h
|
|
|
|
-l | --list List the installed or available (combined with -a)
|
|
language translations
|
|
-a | --available Used in conjunction with -l to show all languages
|
|
-c | --check Check that the language .PO files are present
|
|
-i | --install Install the specified language translations
|
|
-u | --update Update the specified language translations
|
|
-r | --remove Remove the specified language translations
|
|
-v | --verbose Be more verbose on the translation process
|
|
-h | --help Display this help message
|
|
-d | --dev Limit actions to a specific dev instance
|
|
|
|
EOF
|
|
}
|
|
|
|
list()
|
|
{
|
|
all=$1
|
|
|
|
if [ "$all" != "" ]; then
|
|
print_available
|
|
else
|
|
print_installed
|
|
fi
|
|
}
|
|
|
|
print_available()
|
|
{
|
|
# Loop over only one opac theme
|
|
for i in $( ls $PO_DIR | grep opac-bootstrap ); do
|
|
echo `basename $i -opac-bootstrap.po` | \
|
|
grep -v -x -e en
|
|
done
|
|
}
|
|
|
|
print_installed()
|
|
{
|
|
( ls -1 $KOHA_HOME/$OPAC_TMPL/bootstrap/ ; \
|
|
ls -1 $KOHA_HOME/$OPAC_TMPL/prog/ 2> /dev/null ) | \
|
|
sort | uniq | \
|
|
grep -v -e images -e itemtypeimg -x -e en -e css -e js -e less -e lib
|
|
}
|
|
|
|
install_lang()
|
|
{
|
|
local lang=$1
|
|
local translate_opts=""
|
|
|
|
if [ "$verbose" = "yes" ]; then
|
|
translate_opts="--verbose"
|
|
fi
|
|
|
|
if [ "$lang" != "" ]; then
|
|
|
|
if [ "$lang" = "en" ]; then
|
|
die "Error: the default language (en) is already installed."
|
|
fi
|
|
|
|
if print_available | grep -q $lang; then
|
|
if print_installed | grep -q $lang; then
|
|
die "Error: the selected language is already installed. Try --update if you want to re-install it."
|
|
else
|
|
# Check po files are present
|
|
check_lang_po_files $lang
|
|
env PERL5LIB="$PERL5LIB:$TRANSLATE_DIR" \
|
|
KOHA_CONF="$KOHA_CONF" \
|
|
$PERL_CMD $TRANSLATE_DIR/translate install $translate_opts $lang
|
|
fi
|
|
else
|
|
die "Error: the selected language is not currently available."
|
|
fi
|
|
|
|
else
|
|
die "Error: no language code supplied."
|
|
fi
|
|
}
|
|
|
|
update_lang()
|
|
{
|
|
lang=$1
|
|
|
|
if [ "$lang" != "" ]; then
|
|
|
|
if [ "$lang" = "en" ]; then
|
|
die "Error: the default language (en) cannot be updated."
|
|
fi
|
|
|
|
if print_installed | grep -q $lang; then
|
|
# Check po files are present
|
|
check_lang_po_files $lang
|
|
remove_lang $lang
|
|
install_lang $lang
|
|
else
|
|
die "Error: the selected language is not currently installed. Try --install."
|
|
fi
|
|
else
|
|
die "Error: no language code supplied."
|
|
fi
|
|
}
|
|
|
|
remove_lang()
|
|
{
|
|
lang=$1
|
|
|
|
if [ "$lang" != "" ]; then
|
|
|
|
if [ "$lang" = "en" ]; then
|
|
die "Error: the default language (en) cannot be removed."
|
|
fi
|
|
|
|
if print_installed | grep -q $lang; then
|
|
rm -rf $KOHA_HOME/$OPAC_TMPL/bootstrap/$lang
|
|
rm -rf $KOHA_HOME/$INTRANET_TMPL/prog/$lang
|
|
else
|
|
die "Error: the selected language is not installed."
|
|
fi
|
|
else
|
|
die "Error: no language code supplied."
|
|
fi
|
|
}
|
|
|
|
check_lang_po_files()
|
|
{
|
|
lang=$1
|
|
|
|
po_files="$PO_DIR/$lang-marc-MARC21.po
|
|
$PO_DIR/$lang-marc-UNIMARC.po
|
|
$PO_DIR/$lang-opac-bootstrap.po
|
|
$PO_DIR/$lang-pref.po
|
|
$PO_DIR/$lang-staff-prog.po"
|
|
|
|
if [ "$lang" != "" ]; then
|
|
|
|
for po_file in $po_files; do
|
|
if [ ! -f $po_file ]; then
|
|
die "Error: $po_file not found."
|
|
fi
|
|
done
|
|
else
|
|
die "Error: no language code supplied."
|
|
fi
|
|
}
|
|
|
|
set_action()
|
|
{
|
|
if [ "$op" = "" ]; then
|
|
op=$1
|
|
else
|
|
die "Error: only one action can be specified."
|
|
fi
|
|
}
|
|
|
|
set_dev()
|
|
{
|
|
if is_instance $1; then
|
|
dev=$1
|
|
else
|
|
die "Error: Invalid instance name $1"
|
|
fi
|
|
}
|
|
|
|
check_koha_conf()
|
|
{
|
|
if [ "$dev" != "" ]; then
|
|
KOHA_CONF=/etc/koha/sites/$dev/koha-conf.xml
|
|
elif [ -z $KOHA_CONF ]; then
|
|
KOHA_CONF=/etc/koha/koha-conf-site.xml.in
|
|
fi
|
|
}
|
|
|
|
init_template_paths()
|
|
{
|
|
# Template paths
|
|
if [ "$dev" = "" ]; then
|
|
OPAC_TMPL=opac/htdocs/opac-tmpl
|
|
INTRANET_TMPL=intranet/htdocs/intranet-tmpl
|
|
else
|
|
OPAC_TMPL=koha-tmpl/opac-tmpl
|
|
INTRANET_TMPL=koha-tmpl/intranet-tmpl
|
|
fi
|
|
TRANSLATE_DIR="$KOHA_HOME/misc/translator"
|
|
PO_DIR="$TRANSLATE_DIR/po"
|
|
}
|
|
|
|
flush_cache()
|
|
{
|
|
if [ "$dev" = "" ]; then
|
|
koha-foreach --enabled "$KOHA_HOME/bin/clear_cache.pl"
|
|
else
|
|
koha-shell $dev -c "$KOHA_HOME/misc/bin/clear_cache.pl"
|
|
fi
|
|
}
|
|
|
|
# Control variables
|
|
list_all=""
|
|
op=""
|
|
language=""
|
|
verbose="no"
|
|
dev=""
|
|
|
|
# We accept at most 4 parameters
|
|
[ $# -ge 1 ] && [ $# -le 4 ] || ( usage ; die "Error: wrong parameters" )
|
|
|
|
# Read parameters
|
|
while [ $# -gt 0 ]; do
|
|
|
|
case "$1" in
|
|
-h|--help)
|
|
op="help"
|
|
break ;;
|
|
-c|--check)
|
|
set_action "check"
|
|
shift ;;
|
|
-i|--install)
|
|
set_action "install"
|
|
shift ;;
|
|
-u|--update)
|
|
set_action "update"
|
|
shift ;;
|
|
-r|--remove)
|
|
set_action "remove"
|
|
shift ;;
|
|
-l|--list)
|
|
set_action "list"
|
|
shift ;;
|
|
-a|--available)
|
|
list_all=1
|
|
shift ;;
|
|
-v|--verbose)
|
|
verbose="yes"
|
|
shift ;;
|
|
-d|--dev)
|
|
if [ $# -lt 2 ]; then
|
|
die "Error: dev parameter without instance"
|
|
fi
|
|
shift
|
|
set_dev $1
|
|
shift ;;
|
|
-*)
|
|
usage
|
|
die "Error: unknown parameter $1." ;;
|
|
*)
|
|
language=$1
|
|
shift ;;
|
|
esac
|
|
|
|
done
|
|
|
|
if [ "$dev" != "" ]; then adjust_paths_dev_install $dev; fi
|
|
check_koha_conf
|
|
init_template_paths
|
|
PERL_CMD=`which perl`
|
|
|
|
# Process the requested actions
|
|
case $op in
|
|
"help")
|
|
usage ;;
|
|
"list")
|
|
list $list_all ;;
|
|
"install")
|
|
install_lang $language
|
|
flush_cache
|
|
;;
|
|
"update")
|
|
update_lang $language ;;
|
|
"remove")
|
|
remove_lang $language
|
|
flush_cache
|
|
;;
|
|
"check")
|
|
check_lang_po_files $language ;;
|
|
*)
|
|
usage
|
|
die "Error: wrong parameters..." ;;
|
|
esac
|
|
|
|
exit 0
|