Add the following new static methods Convert\Strings::stripUTF8BomBytes: removes the UTF8 BOM bytes from the beginning of a line Used for CSV files created in Excel for the first header entry (line 0/row 0) Get\Systen::getIpAddresses: gets all IP addresses for the the current access user and returns an array Moved the frontend folder detection from the first load config to the config.path.php Cleaned up the translations JS scripts
177 lines
5.3 KiB
Bash
Executable File
177 lines
5.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# read source mo files and writes target js files in object form
|
|
|
|
# check for ARG 1 is "no-move"
|
|
# then do not move the files directly for manual check
|
|
FILE_MOVE=1;
|
|
if [ "${1}" = "no-move" ]; then
|
|
echo "+++ CREATE TEMPORARY FILES +++";
|
|
FILE_MOVE=0;
|
|
else
|
|
echo "*** Direct write ***";
|
|
fi;
|
|
|
|
target='';
|
|
BASE_FOLDER=$(dirname "$(readlink -f "$0")")"/";
|
|
# Assume script is in 4dev/bin
|
|
base_folder="${BASE_FOLDER}../../www/";
|
|
po_folder='../4dev/locale/'
|
|
mo_folder='includes/locale/';
|
|
target_folder='';
|
|
template_file_stump='##SUFFIX##translate-##LANGUAGE##.TMP.js';
|
|
# for output file names
|
|
source_list=(iw);
|
|
language_list=(en ja);
|
|
# set target names
|
|
if [ "${target}" == '' ]; then
|
|
echo "*** Non smarty ***";
|
|
TEXTDOMAINDIR=${base_folder}${mo_folder}.
|
|
# default is admin
|
|
TEXTDOMAIN="admin";
|
|
fi;
|
|
js_folder="${TEXTDOMAIN}/layout/javascript/";
|
|
|
|
error=0;
|
|
# this checks if the TEXTDOMAIN target actually exists
|
|
if [ ! -d "${base_folder}${js_folder}" ]; then
|
|
echo "Cannot find target javascript folder ${base_folder}${js_folder}";
|
|
error=1;
|
|
else
|
|
target_folder="${base_folder}${js_folder}";
|
|
fi;
|
|
|
|
if [ ${error} -eq 1 ]; then
|
|
exit;
|
|
fi;
|
|
|
|
# locale gettext po to mo translator master
|
|
for file in "${base_folder}"../4dev/locale/*.po; do
|
|
[[ -e "$file" ]] || break
|
|
file=$(basename "$file" .po);
|
|
locale=$(echo "${file}" | cut -d "-" -f 1);
|
|
domain=$(echo "${file}" | cut -d "-" -f 2);
|
|
echo "- Translate language file '${file}' for locale '${locale}' and domain '${domain}':";
|
|
if [ ! -d "${base_folder}/includes/locale/${locale}/LC_MESSAGES/" ]; then
|
|
mkdir -p "${base_folder}/includes/locale/${locale}/LC_MESSAGES/";
|
|
fi;
|
|
msgfmt -o "${base_folder}/includes/locale/${locale}/LC_MESSAGES/${domain}.mo" "${base_folder}${po_folder}${locale}-${domain}.po";
|
|
done;
|
|
|
|
rx_msgid_empty="^msgid \"\"";
|
|
rx_msgid="^msgid \"";
|
|
rx_msgstr="^msgstr \""
|
|
|
|
# quick copy string at the end
|
|
quick_copy='';
|
|
|
|
for language in "${language_list[@]}"; do
|
|
# I don't know which one must be set, but I think at least LANGUAGE
|
|
case ${language} in
|
|
ja)
|
|
LANG=ja_JP.UTF-8;
|
|
ENCODING=UTF-8;
|
|
LANGUAGE=ja;
|
|
;;
|
|
en)
|
|
# was en_JP.UTF-8
|
|
LANG=en_US.UTF-8;
|
|
ENCODING=UTF-8;
|
|
LANGUAGE=en;
|
|
;;
|
|
esac;
|
|
# write only one for language and then symlink files
|
|
template_file=$(echo ${template_file_stump} | sed -e "s/##SUFFIX##//" | sed -e "s/##LANGUAGE##/${LANG}/");
|
|
# original_file=$(echo ${template_file} | sed -e 's/\.TMP//g');
|
|
original_file=${template_file//.TMP/};
|
|
if [ "${FILE_MOVE}" -eq 0 ]; then
|
|
file=${target_folder}${template_file};
|
|
else
|
|
file=${target_folder}${original_file};
|
|
fi;
|
|
echo "===> Write translation file ${file}";
|
|
echo ". = normal, : = escape, x = skip";
|
|
# init line [aka don't touch this file]
|
|
echo "// AUTO FILL, changes will be overwritten" > "$file";
|
|
{
|
|
echo "// source: ${suffix}, language: ${language}";
|
|
echo "// Translation strings in the format";
|
|
echo "// \"Original\":\"Translated\""$'\n'
|
|
echo "var i18n = {"
|
|
} >> "$file"
|
|
# translations stuff
|
|
# read the po file
|
|
pos=0; # do we add a , for the next line
|
|
cat "${base_folder}${po_folder}${language}-${TEXTDOMAIN}.po" |
|
|
while read -r str; do
|
|
# echo "S: ${str}";
|
|
# skip empty
|
|
if [[ "${str}" =~ ${rx_msgid_empty} ]]; then
|
|
# skip on empty
|
|
echo -n "x";
|
|
# msgid is left, msgstr is right
|
|
elif [[ "${str}" =~ ${rx_msgid} ]]; then
|
|
echo -n ".";
|
|
# open left side
|
|
# TODO: how to handle multi line strings: or don't use them
|
|
# extract from between ""
|
|
str_source=$(echo "${str}" | sed -e "s/^msgid \"//" | sed -e "s/\"$//");
|
|
# close right side, if not last add ,
|
|
if [ "${pos}" -eq 1 ]; then
|
|
echo -n "," >> "$file";
|
|
fi;
|
|
# all " inside string need to be escaped
|
|
# str_source=$(echo "${str_source}" | sed -e 's/"/\\"/g');
|
|
str_source=${str_source//\"/\\\"}
|
|
# fix with proper layout
|
|
echo -n "\"$str_source\":\"$(TEXTDOMAINDIR=${TEXTDOMAINDIR} LANGUAGE=${language} LANG=${LANG} gettext "${TEXTDOMAIN}" "${str_source}")\"" >> "$file";
|
|
pos=1;
|
|
elif [[ "${str}" =~ ${rx_msgstr} ]]; then
|
|
# open right side (ignore)
|
|
echo -n "";
|
|
else
|
|
# general ignore (anything between or comments)
|
|
echo -n "";
|
|
fi;
|
|
done;
|
|
|
|
echo "" >> "$file";
|
|
echo "};" >> "$file";
|
|
echo " [DONE]";
|
|
|
|
# on no move
|
|
if [ "${FILE_MOVE}" -eq 0 ]; then
|
|
echo "===> Confirm all changes in ${file} and then move data to original";
|
|
echo "";
|
|
quick_copy=${quick_copy}"mv ${template_file} ${original_file}"$'\n';
|
|
fi;
|
|
|
|
# symlink to master file
|
|
for suffix in "${source_list[@]}"; do
|
|
# symlink with full lang name
|
|
symlink_file[0]=$(echo ${template_file_stump} | sed -e "s/##SUFFIX##/${suffix}_/" | sed -e "s/##LANGUAGE##/${LANG}/" | sed -e 's/\.TMP//g');
|
|
# create second one with lang (no country) + encoding
|
|
symlink_file[1]=$(echo ${template_file_stump} | sed -e "s/##SUFFIX##/${suffix}_/" | sed -e "s/##LANGUAGE##/${LANGUAGE}\.${ENCODING}/" | sed -e 's/\.TMP//g');
|
|
for template_file in "${symlink_file[@]}"; do
|
|
# if this is not symlink, create them
|
|
if [ ! -h "${template_file}" ]; then
|
|
echo "Create symlink: ${template_file}";
|
|
# symlik to original
|
|
cd "${target_folder}" || exit;
|
|
ln -sf "${original_file}" "${template_file}";
|
|
cd - >/dev/null || exit;
|
|
fi;
|
|
done;
|
|
done;
|
|
done;
|
|
|
|
if [ "${FILE_MOVE}" -eq 0 ]; then
|
|
echo "";
|
|
echo "-- IN FOLDER: ${target_folder}";
|
|
echo "-- START: copy lines below to copy created over original --";
|
|
echo "${quick_copy}";
|
|
echo "-- END ----------------------------------------------------";
|
|
fi;
|
|
|
|
# __END__
|