pandorafms/pandora_console/include/languages/po_auto_translate.sh

137 lines
3.2 KiB
Bash
Executable File

#!/bin/bash
FILE=$1
SOURCE_LANG="en"
TARGET_LANG=$2
ID=""
STR=""
REAL_ID=""
NEW_STR=""
READING_ID=0
READING_STR=0
TARGET_LANG=$(echo "$TARGET_LANG" | tr '[:upper:]' '[:lower:]')
function help() {
echo "Usage: $0 <path_to_file.po> <es|ja|ca|fr|ru>"
}
function check_target_lang() {
case $TARGET_LANG in
es|ja|ca|fr|ru)
return 0 # Valid
;;
*)
return 1 # Invalid
;;
esac
}
function translate_text() {
local text="$1"
# URL encode the text
local encoded_text=$(echo -n "$text" | jq -sRr @uri)
# Google Translate API endpoint
local url="https://translate.googleapis.com/translate_a/single?client=gtx&sl=$SOURCE_LANG&tl=$TARGET_LANG&dt=t&q=$encoded_text"
# Send GET request to Google Translate API
local translated_text=$(curl -s "$url" | jq -r '.[0][][0]' | tr -d '\n')
echo "$translated_text"
}
if command -v jq &> /dev/null; then
if check_target_lang && [ "$FILE" != "" ] && [ -f $FILE ]; then
while IFS= read -r line; do
if [[ $line == "#"* ]]; then
continue
fi
if [ "$line" == "" ]; then
continue
fi
if [[ $line == msgid* ]]; then
# Check if ID is not empty (i.e., if this is not the first ID)
if [ -n "$ID" ]; then
if [ "$ID" != "" ]; then
if [ "$STR" == "" ]; then
STR=$(translate_text "$ID")
fi
echo "msgid ${REAL_ID}"$'\n'"msgstr \"${STR}\""$'\n'
REAL_ID=""
ID=""
STR=""
fi
fi
READING_ID=1
READING_STR=0
# Initialize ID with the content after "msgid "
TMP="${line#msgid }"
REAL_ID="${TMP}"
TMP="${TMP#\"}"
ID="${TMP%\"}"
elif [[ $line == msgstr* ]]; then
READING_ID=0
READING_STR=1
# Initialize STR with the content after "msgstr "
TMP="${line#msgstr }"
TMP="${TMP#\"}"
STR="${TMP%\"}"
else
# If reading ID, append to ID
if [ $READING_ID -eq 1 ]; then
REAL_ID="${REAL_ID}"$'\n'"${line}"
TMP="${line#\"}"
TMP="${TMP%\"}"
ID="$ID$TMP"
# If reading STR, append to STR
elif [ $READING_STR -eq 1 ]; then
TMP="${line#\"}"
TMP="${TMP%\"}"
STR="$STR$TMP"
fi
fi
done < $FILE
if [ "$ID" != "" ]; then
if [ "$STR" == "" ]; then
STR=$(translate_text "$ID")
fi
echo "msgid ${REAL_ID}"$'\n'"msgstr \"${STR}\""$'\n'
REAL_ID=""
ID=""
STR=""
fi
else
help
echo
echo "[ERROR] File [$FILE] not found or not valid language [$TARGET_LANG]"
fi
else
echo "[ERROR] Command needed to run script: jq"
fi