#!/bin/bash # # Functions to update langpacks. # APPMODULENAME='local_moodlemobileapp' TOTAL_STRINGS=0 LANGINDEX_STRINGS=0 function progressbar { let _progress=(${1}*100/100*100)/100 let _done=(${_progress}*4)/10 let _left=40-$_done _fill=$(printf "%${_done}s") _empty=$(printf "%${_left}s") bar=`printf "[${_fill// /#}${_empty// /-}] ${_progress}%%"` } # Copy language file function copy_lang { lang=$1 index_keys=`jq -r 'to_entries[] | "\"\(.key)\","' langindex.json` index_keys=`echo $index_keys | sed 's/,*$//'` hyphenlang=${lang/_/-} langfilepath=$LANG_PATH/$hyphenlang.json cp $LANGPACKS_PATH/$lang.json $langfilepath # Merge SUFFIX file if exists. if [ ! -z "$SUFFIX" ] && [ -f "$LANGPACKS_PATH/${lang}_${SUFFIX}.json" ]; then suffixfilepath="$LANGPACKS_PATH/${lang}_${SUFFIX}.json" jq --indent 4 -s --sort-keys ".[0] + .[1]" $langfilepath $suffixfilepath > /tmp/moodle-langtmp.json mv /tmp/moodle-langtmp.json $langfilepath fi # Remove strings non exiting on langindex. query="with_entries(select([.key] | inside([$index_keys])))" jq --indent 2 -r "$query" $langfilepath > /tmp/moodle-langtmp.json mv /tmp/moodle-langtmp.json $langfilepath name=`jq -r .\"$lang\".name $LANGPACKS_PATH/languages.json` local=`jq -r .\"$lang\".local $LANGPACKS_PATH/languages.json` translated=`jq -r '. | length' $langfilepath` percentage=`echo "($translated * 100) /$LANGINDEX_STRINGS" | bc` progressbar $percentage echo -e "Generated $hyphenlang\t $translated of $LANGINDEX_STRINGS\t $bar ($local local)" # Add or update language name to config. newlang="{\"$hyphenlang\": \"$name\"}" languages=`jq -s --sort-keys ".[0].languages + $newlang" ../moodle.config.json` jq --indent 4 -s ".[0].languages = $languages | .[0]" ../moodle.config.json > /tmp/moodle-langtmp.json mv /tmp/moodle-langtmp.json ../moodle.config.json } function detect_lang { lang=$1 name=`jq -r .\"$lang\".name $LANGPACKS_PATH/languages.json` if [ -z "$name" ] || [ "$name" == 'null' ]; then continue fi hyphenlang=${lang/_/-} if [ -f $LANG_PATH/$hyphenlang.json ]; then # Already exists continue fi local=`jq -r .\"$lang\".local $LANGPACKS_PATH/languages.json` translated=`jq -r .\"$lang\".translated $LANGPACKS_PATH/languages.json` percentage=`echo "($translated * 100) /$TOTAL_STRINGS" | bc` progressbar $percentage echo -e "Checking $lang\t $translated of $TOTAL_STRINGS \t $bar ($local local)"; if [[ ( $percentage -gt 75 && $local -gt 50 ) || ( $percentage -gt 50 && $local -gt 75 ) ]] ; then name=`jq -r .\"$lang\".name $LANGPACKS_PATH/languages.json` echo "*** NEW LANGUAGE DETECTED $lang - $name ***" copy_lang $lang fi } function load_langpacks { get_app_version print_title 'Getting local mobile langs' if [ -d $LANGPACKS_PATH ]; then pushd $LANGPACKS_PATH git checkout "langpack_$LANGVERSION" git pull if [ $? -ne 0 ]; then echo "Cannot update language repository" exit 1 fi popd else git clone --depth 1 --single-branch --branch "langpack_$LANGVERSION" https://github.com/moodlehq/moodle-local_moodlemobileapp.git $LANGPACKS_PATH if [ $? -ne 0 ]; then echo "Cannot clone language repository" exit 1 fi fi local_strings=`jq -r '.languages.local' $LANGPACKS_PATH/languages.json` TOTAL_STRINGS=`jq -r '.languages.total' $LANGPACKS_PATH/languages.json` LANGINDEX_STRINGS=`jq -r '. | length' langindex.json` print_message "Total strings to translate $TOTAL_STRINGS ($local_strings local)"; } # Entry function to get all language files. function get_languages { print_title 'Copying existing languages' # Existing languages, copy and clean the files. langs=`jq -r '.languages | keys[]' ../moodle.config.json` for lang in $langs; do lang=${lang//-/_} copy_lang $lang done } # Entry function to detect new languages. function detect_languages { # Do not detect new langs when suffix is set. if [ ! -z $SUFFIX ]; then return fi print_title "Detect new languages" langs=`jq -r 'keys[]' $LANGPACKS_PATH/languages.json` for lang in $langs; do if [[ $lang = *_wp ]]; then # Skip Workplace. continue fi detect_lang $lang done } # Entry function to generate translation module file. function generate_local_module_file { if [ ! -d "../../moodle-$APPMODULENAME" ]; then print_error "Module $APPMODULENAME directory does not exists, skipping..." return fi print_title "Generating $APPMODULENAME..." module_translations='' keys=`jq -r 'map_values(select(contains("local_moodlemobileapp"))) | keys[]' langindex.json` for key in $keys; do # Check if already parsed. translation=`jq -r .\"$key\" $LANG_PATH/en.json` if [ -z "$translation" ]; then echo "Key $key not translated!" continue fi translation="${translation//\'/\\\'}" module_translations="$module_translations\$string['$key'] = '$translation';\n"; done if [ -z "$module_translations" ]; then print_error "ERROR, translations not found, you probably didn't run gulp lang!"; return fi echo -e $module_translations > /tmp/translations.php filepath="../../moodle-$APPMODULENAME/lang/en/$APPMODULENAME.php"; BEGIN_GEN=$(cat $filepath | grep -n '\/\* AUTO START \*\/' | sed 's/\(.*\):.*/\1/g') END_GEN=$(cat $filepath | grep -n '\/\* AUTO END \*\/' | sed 's/\(.*\):.*/\1/g') cat <(head -n $BEGIN_GEN $filepath) /tmp/translations.php <(tail -n +$END_GEN $filepath) > /tmp/translations_temp.php mv /tmp/translations_temp.php $filepath cp langindex.json ../../moodle-$APPMODULENAME }