# run this script from the root directory to re-generate the .pot file
#
# ./data/po/update_pot.sh
if [ -z "$PYTHON" ]; then
PYTHON="python"
fi
CPP_FILE_LIST="`find ./src \
-name '*.cpp' -or \
-name '*.c' -or \
-name '*.hpp' -or \
-name "*.h" | sort -n \
`"
XML_FILE_LIST="`find ./data \
../stk-assets/tracks \
../stk-assets/karts \
../supertuxkart-assets/tracks \
../supertuxkart-assets/karts \
./android/res/values \
-name 'achievements.xml' -or \
-name 'tips.xml' -or \
-name 'kart.xml' -or \
-name 'track.xml' -or \
-name 'scene.xml' -or \
-name '*.challenge' -or \
-name '*.grandprix' -or \
-name 'strings.xml' -or \
-name '*.stkgui' | sort -n \
`"
ANGELSCRIPT_FILE_LIST="`find ./data \
../stk-assets/tracks \
../supertuxkart-assets/tracks \
-name '*.as' | sort -n \
`"
echo "--------------------"
echo " Source Files :"
echo "--------------------"
echo $CPP_FILE_LIST
echo $ANGELSCRIPT_FILE_LIST
echo "--------------------"
echo " XML Files :"
echo "--------------------"
echo $XML_FILE_LIST
# XML Files
eval '$PYTHON ./data/po/extract_strings_from_XML.py $XML_FILE_LIST'
echo "---------------------------"
echo " Generating .pot file..."
# XML Files
xgettext -d supertuxkart --keyword=_ --add-comments="I18N:" \
-p ./data/po -o supertuxkart.pot \
--no-location --from-code=UTF-8 ./data/po/gui_strings.h \
--package-name=supertuxkart
# C++ Files
xgettext -j -d supertuxkart --keyword=_ --keyword=N_ --keyword=_LTR \
--keyword=_C:1c,2 --keyword=_P:1,2 \
--keyword=_CP:1c,2,3 --add-comments="I18N:" \
-p ./data/po -o supertuxkart.pot $CPP_FILE_LIST \
--package-name=supertuxkart
# Angelscript files (xgettext doesn't support AS so pretend it's c++)
xgettext -j -d supertuxkart --keyword="translate" --add-comments="I18N:" \
-p ./data/po -o supertuxkart.pot $ANGELSCRIPT_FILE_LIST \
--package-name=supertuxkart --language=c++
STK_DESCRIPTION="A 3D open-source kart racing game"
STK_DESKTOP_FILE_P1="[Desktop Entry]"
# Split it to avoid SuperTuxKart being translated
STK_DESKTOP_FILE_P2="Name=SuperTuxKart
Icon=supertuxkart"
STK_DESKTOP_FILE_P3="#I18N: Generic name in desktop file entry, \
summary in AppData and short description in Google Play
GenericName=$STK_DESCRIPTION
Exec=supertuxkart
Terminal=false
StartupNotify=false
Type=Application
Categories=Game;ArcadeGame;
#I18N: Keywords in desktop entry, translators please keep it separated with semicolons
Keywords=tux;game;race;
PrefersNonDefaultGPU=true"
echo "${STK_DESKTOP_FILE_P1}" > supertuxkart.desktop
echo "${STK_DESKTOP_FILE_P3}" >> supertuxkart.desktop
STK_APPDATA_P1="Karts. Nitro. Action! SuperTuxKart is a 3D open-source arcade racer \
with a variety of characters, tracks, and modes to play. \
Our aim is to create a game that is more fun than realistic, \
and provide an enjoyable experience for all ages."
STK_APPDATA_P2="Discover the mystery of an underwater world, \
or drive through the jungles of Val Verde and visit the famous Cocoa Temple. \
Race underground or in a spaceship, through a rural farmland or a strange alien planet. \
Or rest under the palm trees on the beach, watching the other karts overtake you. \
But don't eat the bananas! Watch for bowling balls, plungers, bubble gum, \
and cakes thrown by your opponents."
STK_APPDATA_P3="You can do a single race against other karts, \
compete in one of several Grand Prix, \
try to beat the high score in time trials on your own, \
play battle mode against the computer or your friends, \
and more! For a greater challenge, race online against players from all over the world \
and prove your racing skills!"
# Used in google play only for now
STK_APPDATA_P4="This game is free and without ads."
# Used in google play beta only for now
STK_APPDATA_P5="This is an unstable version of SuperTuxKart that contains latest improvements. \
It is released mainly for testing, to make stable STK as good as possible."
STK_APPDATA_P6="This version can be installed in parallel with the stable version on the device."
STK_APPDATA_P7="If you need more stability, consider using the stable version: %s"
STK_STABLE_URL="https://play.google.com/store/apps/details?id=org.supertuxkart.stk"
STK_APPDATA_FILE_1="
supertuxkart.desktop
CC0-1.0
GPL-3.0+"
# Split it to avoid SuperTuxKart being translated
STK_APPDATA_FILE_2=" SuperTuxKart"
STK_APPDATA_FILE_3=" A 3D open-source kart racing game
"${STK_APPDATA_P1}"
"${STK_APPDATA_P2}"
"${STK_APPDATA_P3}"
"
STK_APPDATA_FILE_4="
$STK_APPDATA_P4
$STK_APPDATA_P5
$STK_APPDATA_P6
$STK_APPDATA_P7
"
STK_APPDATA_FILE_5="
https://supertuxkart.net/images/8/83/Supertuxkart-0.9.2-screenshot-3.jpg
Normal Race
https://supertuxkart.net/images/1/1f/Supertuxkart-0.9.2-screenshot-1.jpg
Battle
https://supertuxkart.net/images/2/2a/Supertuxkart-0.9.2-screenshot-2.jpg
Soccer
SuperTuxKart Team
supertuxkart-devel@lists.sourceforge.net
https://supertuxkart.net
https://github.com/supertuxkart/stk-code/issues
https://supertuxkart.net/Donate
https://supertuxkart.net/Community
https://supertuxkart.net/Translating_STK
mild
intense
"
STK_APPDATA_FILE_6="
"
echo "${STK_APPDATA_FILE_1}" > supertuxkart.appdata.xml
echo "${STK_APPDATA_FILE_3}" >> supertuxkart.appdata.xml
echo "${STK_APPDATA_FILE_4}" >> supertuxkart.appdata.xml
echo "${STK_APPDATA_FILE_5}" >> supertuxkart.appdata.xml
echo "${STK_APPDATA_FILE_6}" >> supertuxkart.appdata.xml
# Desktop and AppData entry
xgettext -j -d supertuxkart --add-comments="I18N:" \
-p ./data/po -o supertuxkart.pot \
--package-name=supertuxkart supertuxkart.desktop supertuxkart.appdata.xml
echo "${STK_DESKTOP_FILE_P1}" > supertuxkart.desktop
echo "${STK_DESKTOP_FILE_P2}" >> supertuxkart.desktop
echo "${STK_DESKTOP_FILE_P3}" >> supertuxkart.desktop
echo "${STK_APPDATA_FILE_1}" > supertuxkart.appdata.xml
echo "${STK_APPDATA_FILE_2}" >> supertuxkart.appdata.xml
echo "${STK_APPDATA_FILE_3}" >> supertuxkart.appdata.xml
# Skip google play message
echo "${STK_APPDATA_FILE_5}" >> supertuxkart.appdata.xml
# Manually copy zh_TW to zh_HK for fallback
cp data/po/zh_TW.po data/po/zh_HK.po
rm -rf ./google_play_msg
function translate_str()
{
# Remove newline in msgid of po file first
echo $(sed ':a;N;$!ba;s/\"\n\"//g' "$2" \
| grep -A 1 -e "msgid \"$1\"" | tail -n +2 | cut -c 9- |sed 's/.$//')
}
for PO in $(ls data/po/*.po); do
CUR_LANG=$(basename $PO .po)
if [ "$CUR_LANG" != "en" ]; then
printf "$CUR_LANG " >> data/po/LINGUAS
PO_NO_FALLBACK=$PO
if [ "$CUR_LANG" = "fr_CA" ]; then
PO_NO_FALLBACK="data/po/fr.po"
fi
TOTAL_STR=$(sed ':a;N;$!ba;s/\"\n\"//g' $PO_NO_FALLBACK | grep "msgid \"" | wc -l)
UNTRANSLATED_STR=$(sed ':a;N;$!ba;s/\"\n\"//g' $PO_NO_FALLBACK | grep "msgstr \"\"" | wc -l)
TRANSLATED_STR=$(expr $TOTAL_STR - $UNTRANSLATED_STR)
PERCENTAGE=$(python -c "print(int($TRANSLATED_STR / $TOTAL_STR * 100.0))")
if [ "$PERCENTAGE" = "0" ]; then
continue
elif [ "$PERCENTAGE" != "100" ]; then
printf " $CUR_LANG" >> supertuxkart.appdata.xml
else
printf " $CUR_LANG" >> supertuxkart.appdata.xml
fi
fi
if [ "$1" != "--generate-google-play-msg" ]; then
continue
fi
DESC=$(translate_str "$STK_DESCRIPTION" "$PO")
P1=$(translate_str "$STK_APPDATA_P1" "$PO")
P2=$(translate_str "$STK_APPDATA_P2" "$PO")
P3=$(translate_str "$STK_APPDATA_P3" "$PO")
P4=$(translate_str "$STK_APPDATA_P4" "$PO")
P5=$(translate_str "$STK_APPDATA_P5" "$PO")
P6=$(translate_str "$STK_APPDATA_P6" "$PO")
P7=$(translate_str "$STK_APPDATA_P7" "$PO")
if [ -n "$DESC" ] && [ -n "$P1" ] && [ -n "$P2" ] && [ -n "$P3" ] && \
[ -n "$P4" ] && [ -n "$P5" ] && [ -n "$P6" ] && [ -n "$P7" ]; then
mkdir -p ./google_play_msg/$CUR_LANG
P7=$(sed "s|%s|$STK_STABLE_URL|g" <<< $P7)
printf "$DESC" > google_play_msg/$CUR_LANG/short.txt
printf "$P1\n\n$P2\n\n$P3\n\n$P4" > google_play_msg/$CUR_LANG/full.txt
printf "$P1\n\n$P2\n\n$P3\n\n$P4\n\n---\n\n$P5\n\n$P6\n\n$P7" > google_play_msg/$CUR_LANG/full_beta.txt
fi
done
echo "${STK_APPDATA_FILE_6}" >> supertuxkart.appdata.xml
msgfmt --desktop -d data/po --template supertuxkart.desktop -o data/supertuxkart.desktop
msgfmt --xml -d data/po --template supertuxkart.appdata.xml -o data/supertuxkart.appdata.xml
rm -f ./supertuxkart.desktop
rm -f ./supertuxkart.appdata.xml
rm -f ./data/po/LINGUAS
rm -f ./data/po/zh_HK.po
echo " Done"
echo "---------------------------"