From a3b0c4d240b16288972547744a0b601eb49acbb3 Mon Sep 17 00:00:00 2001 From: Benau Date: Sun, 19 Jul 2020 14:21:14 +0800 Subject: [PATCH] Make android game data extraction ui translatable --- android/make.sh | 72 +++++++++++++++++++ .../src/main/java/SuperTuxKartActivity.java | 10 +-- data/po/extract_strings_from_XML.py | 5 +- data/po/update_pot.sh | 2 + 4 files changed, 83 insertions(+), 6 deletions(-) diff --git a/android/make.sh b/android/make.sh index 3ca2913cc..be0c5606c 100755 --- a/android/make.sh +++ b/android/make.sh @@ -509,15 +509,87 @@ mkdir -p "$DIRNAME/res/drawable-hdpi/" mkdir -p "$DIRNAME/res/drawable-xhdpi/" mkdir -p "$DIRNAME/res/drawable-xxhdpi/" mkdir -p "$DIRNAME/res/drawable-xxxhdpi/" +rm -rf "$DIRNAME/res/values*" mkdir -p "$DIRNAME/res/values/" STRINGS_FILE="$DIRNAME/res/values/strings.xml" +# Strings used in stk android ui (when extracting game data first time) +PO_EXTRACT_GAME_DATA="po_extract_game_data" +PO_EXTRACT_GAME_DATA_STR="Extracting game data..." +PO_EXTRACT_ERROR="po_extract_error" +PO_EXTRACT_ERROR_STR="Game data extraction error" +PO_EXTRACT_ERROR_MSG="po_extract_error_msg" +PO_EXTRACT_ERROR_MSG_STR="Check remaining device space or reinstall SuperTuxKart." +PO_QUIT="po_quit" +PO_QUIT_STR="Quit" + echo "" > "$STRINGS_FILE" +echo "" >> "$STRINGS_FILE" echo "" >> "$STRINGS_FILE" echo " $APP_NAME" >> "$STRINGS_FILE" +echo " $PO_EXTRACT_GAME_DATA_STR" >> "$STRINGS_FILE" +echo " $PO_EXTRACT_ERROR_STR" >> "$STRINGS_FILE" +echo " $PO_EXTRACT_ERROR_MSG_STR" >> "$STRINGS_FILE" +echo " $PO_QUIT_STR" >> "$STRINGS_FILE" echo "" >> "$STRINGS_FILE" +function translate_str() +{ + echo $(grep -A 1 -e "msgid \"$1\"" "$2" \ + | sed -n 's/msgstr "\(.*\)"/\1/p' | sed "s/'/\\\'/g") +} + +find "$DIRNAME/assets/data/po" -type f -name '*.po' -print0 | +while IFS= read -r -d '' PO; do + CUR_LANG=$(basename -- "$PO" | cut -f 1 -d '.') + # Skip english po file + if [ "$CUR_LANG" = "en" ]; then + continue + fi + # Fix some difference in language code + if [ "$CUR_LANG" = "he" ]; then + # Hebrew + CUR_LANG="iw" + fi + if [ "$CUR_LANG" = "id" ]; then + # Indonesian + CUR_LANG="in" + fi + if [ "$CUR_LANG" = "yi" ]; then + # Yiddish + CUR_LANG="ji" + fi + CUR_LANG=$(echo "$CUR_LANG" | sed 's/_/-r/g') + EXTRACT_GAME_DATA_STR=$(translate_str "$PO_EXTRACT_GAME_DATA_STR" "$PO") + EXTRACT_ERROR_STR=$(translate_str "$PO_EXTRACT_ERROR_STR" "$PO") + EXTRACT_ERROR_MSG_STR=$(translate_str "$PO_EXTRACT_ERROR_MSG_STR" "$PO") + QUIT_STR=$(translate_str "$PO_QUIT_STR" "$PO") + if [ -n "$EXTRACT_GAME_DATA_STR" ] \ + || [ -n "$EXTRACT_ERROR_STR" ] \ + || [ -n "$EXTRACT_ERROR_MSG_STR" ] \ + || [ -n "$QUIT_STR" ]; then + mkdir -p "$DIRNAME/res/values-$CUR_LANG" + TRANSLATION="$DIRNAME/res/values-$CUR_LANG/strings.xml" + echo "" > "$TRANSLATION" + echo "" >> "$TRANSLATION" + echo "" >> "$TRANSLATION" + if [ -n "$EXTRACT_GAME_DATA_STR" ] ; then + echo " $EXTRACT_GAME_DATA_STR" >> "$TRANSLATION" + fi + if [ -n "$EXTRACT_ERROR_STR" ] ; then + echo " $EXTRACT_ERROR_STR" >> "$TRANSLATION" + fi + if [ -n "$EXTRACT_ERROR_MSG_STR" ] ; then + echo " $EXTRACT_ERROR_MSG_STR" >> "$TRANSLATION" + fi + if [ -n "$QUIT_STR" ] ; then + echo " $QUIT_STR" >> "$TRANSLATION" + fi + echo "" >> "$TRANSLATION" + fi +done + ADAPTIVE_ICON_FILE="$DIRNAME/res/drawable-anydpi-v26/icon.xml" echo "" > "$ADAPTIVE_ICON_FILE" diff --git a/android/src/main/java/SuperTuxKartActivity.java b/android/src/main/java/SuperTuxKartActivity.java index 9d7177371..b6c4055d7 100644 --- a/android/src/main/java/SuperTuxKartActivity.java +++ b/android/src/main/java/SuperTuxKartActivity.java @@ -75,7 +75,8 @@ public class SuperTuxKartActivity extends SDLActivity ViewGroup.LayoutParams.WRAP_CONTENT); ll_param.gravity = Gravity.CENTER; TextView tv = new TextView(this); - tv.setText("Extracting game data..."); + // From values strings.xml which is generated by make.sh + tv.setText(getString(R.string.po_extract_game_data)); tv.setLayoutParams(ll_param); ll_param = new LinearLayout.LayoutParams( @@ -343,10 +344,9 @@ public class SuperTuxKartActivity extends SDLActivity } AlertDialog.Builder error = new AlertDialog.Builder(SDL.getContext()); - error.setMessage("Check remaining device space or " + - "reinstall SuperTuxKart."); - error.setTitle("Extract game data error"); - error.setPositiveButton("Exit", + error.setMessage(getString(R.string.po_extract_error_msg)); + error.setTitle(getString(R.string.po_extract_error)); + error.setPositiveButton(getString(R.string.po_quit), new DialogInterface.OnClickListener() { @Override diff --git a/data/po/extract_strings_from_XML.py b/data/po/extract_strings_from_XML.py index 2312ec8dd..a560e7dd7 100755 --- a/data/po/extract_strings_from_XML.py +++ b/data/po/extract_strings_from_XML.py @@ -50,7 +50,10 @@ def traverse(file, node, isChallenge, isGP, isKart, isTrack, isAchievements, lev f.write( line.encode( "utf-8" ) ) else: - if e.hasAttribute("text") and len(e.getAttribute("text")) > 0: + if e.nodeName == "string" and e.hasAttribute("name") and e.getAttribute("name").startswith("po_") and e.firstChild is not None: + line = "//I18N: In Android UI, " + e.getAttribute("name") + "\n_(\"" + e.firstChild.nodeValue + "\")\n\n" + f.write( line.encode( "utf-8" ) ) + elif e.hasAttribute("text") and len(e.getAttribute("text")) > 0: # print "Label=", e.getAttribute("text"), " Comment=", comment line = "" if comment == None: diff --git a/data/po/update_pot.sh b/data/po/update_pot.sh index 2137647cb..67e9f56e6 100755 --- a/data/po/update_pot.sh +++ b/data/po/update_pot.sh @@ -16,6 +16,7 @@ XML_FILE_LIST="`find ./data \ ../stk-assets/karts \ ../supertuxkart-assets/tracks \ ../supertuxkart-assets/karts \ + ./android/res/values \ -name 'achievements.xml' -or \ -name 'tips.xml' -or \ -name 'kart.xml' -or \ @@ -23,6 +24,7 @@ XML_FILE_LIST="`find ./data \ -name 'scene.xml' -or \ -name '*.challenge' -or \ -name '*.grandprix' -or \ + -name 'strings.xml' -or \ -name '*.stkgui' | sort -n \ `" ANGELSCRIPT_FILE_LIST="`find ./data \