From 0584081c331b90c18a432fe2ddddcda3a36f2c4b Mon Sep 17 00:00:00 2001 From: MacRimi Date: Sat, 5 Jul 2025 11:48:33 +0200 Subject: [PATCH] Update utils.sh --- scripts/utils.sh | 86 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 85 insertions(+), 1 deletion(-) diff --git a/scripts/utils.sh b/scripts/utils.sh index 8694420..386235f 100644 --- a/scripts/utils.sh +++ b/scripts/utils.sh @@ -212,8 +212,13 @@ load_language() { fi } + + +######################################################## + + # Translation with cache and predefined terms -translate() { +translate_() { local text="$1" local dest_lang="$LANGUAGE" @@ -288,6 +293,85 @@ print(translate_text('$text', '$dest_lang')) + +translate() { + local text="$1" + local dest_lang="$LANGUAGE" + + # If the language is English, return the original text without translating or caching + if [ "$dest_lang" = "en" ]; then + echo "$text" + return + fi + + if [ ! -s "$CACHE_FILE" ] || ! jq -e . "$CACHE_FILE" > /dev/null 2>&1; then + echo "{}" > "$CACHE_FILE" + fi + + local cached_translation=$(jq -r --arg text "$text" --arg lang "$dest_lang" '.[$text][$lang] // .[$text]["notranslate"] // empty' "$CACHE_FILE") + if [ -n "$cached_translation" ]; then + echo "$cached_translation" + return + fi + + # Robust check: skip python if venv or googletrans not ready + if [ ! -d "$VENV_PATH" ] || [ ! -f "$VENV_PATH/bin/activate" ] || ! "$VENV_PATH/bin/python3" -c "import googletrans" 2>/dev/null; then + echo "$text" + return + fi + + source "$VENV_PATH/bin/activate" + local translated + translated=$(python3 -c " +from googletrans import Translator +import sys, json, re + +def translate_text(text, dest_lang): + translator = Translator() + # Context is not strictly necessary, but if you want it: + context = '###CONTEXT### ' + try: + result = translator.translate(context + text, dest=dest_lang).text + # Remove context marker if present + translated = re.sub(r'^.*###CONTEXT### ?', '', result).strip() + return json.dumps({'success': True, 'text': translated}) + except Exception as e: + return json.dumps({'success': False, 'error': str(e)}) + +print(translate_text('$text', '$dest_lang')) +") + deactivate + + local translation_result=$(echo "$translated" | jq -r '.') + local success=$(echo "$translation_result" | jq -r '.success') + + if [ "$success" = "true" ]; then + translated=$(echo "$translation_result" | jq -r '.text') + + # Post-process: Remove context marker again, just in case + translated=$(echo "$translated" | sed -E 's/^.*###CONTEXT### ?//g') + + if [ "$dest_lang" != "en" ]; then + local temp_cache=$(mktemp) + jq --arg text "$text" --arg lang "$dest_lang" --arg translated "$translated" ' + if .[$text] == null then .[$text] = {} else . end | + .[$text][$lang] = $translated + ' "$CACHE_FILE" > "$temp_cache" && mv "$temp_cache" "$CACHE_FILE" + fi + + echo "$translated" + else + echo "$text" + fi +} + + + +######################################################## + + + + show_proxmenux_logo() { clear