#!/bin/sh CACHE_DIR="$HOME/.cache/stranslate/" get_translation() { translation=$(curl -s -F "from=${from_language}" -F "to=${to_language}" -F "text=${input}" https://simplytranslate.org/"${engine}" | grep -Poe "readonly>.*" | sed -e "s/readonly>//g" | sed -e "s/<\/textarea>//g") if [ "$translation" = "" ]; then echo "stranslate: Error getting translation" exit 1 else echo "$translation" fi } get_languages() { curl -s https://simplytranslate.org/"${engine}" | awk '/from_language/ {sub(".*", "From Language", $0); print} /to_language/ {sub(".*", "To Language", $0); print} /option/ {sub("^.*=\"", "", $0); sub("\".*", "", $0); print}' } load_languages() { if [ -n "${engine}" ]; then case "${engine}" in ?engine=libre) if [ -s "${CACHE_DIR}"languages_libre.txt ]; then if [ "$(date -r "${CACHE_DIR}"languages_libre.txt +%W)" != "$(date +%W)" ]; then get_languages > "${CACHE_DIR}"languages_libre.txt fi if [ -p "${CACHE_DIR}"from_language ] && [ -p "${CACHE_DIR}"to_language ]; then sed '/To Language/,$d' "${CACHE_DIR}"languages_libre.txt > "${CACHE_DIR}"from_language & sed '/To Language/p; 1,/To Language/d' "${CACHE_DIR}"languages_libre.txt > "${CACHE_DIR}"to_language & else mkfifo "${CACHE_DIR}"from_language 2>/dev/null mkfifo "${CACHE_DIR}"to_language 2>/dev/null sed '/To Language/,$d' "${CACHE_DIR}"languages_libre.txt > "${CACHE_DIR}"from_language & sed '/To Language/p; 1,/To Language/d' "${CACHE_DIR}"languages_libre.txt > "${CACHE_DIR}"to_language & fi else mkdir -p "${CACHE_DIR}" get_languages > "${CACHE_DIR}"languages_libre.txt if [ -p "${CACHE_DIR}"from_language ] && [ -p "${CACHE_DIR}"to_language ]; then sed '/To Language/,$d' "${CACHE_DIR}"languages_libre.txt > "${CACHE_DIR}"from_language & sed '/To Language/p; 1,/To Language/d' "${CACHE_DIR}"languages_libre.txt > "${CACHE_DIR}"to_language & else mkfifo "${CACHE_DIR}"from_language 2>/dev/null mkfifo "${CACHE_DIR}"to_language 2>/dev/null sed '/To Language/,$d' "${CACHE_DIR}"languages_libre.txt > "${CACHE_DIR}"from_language & sed '/To Language/p; 1,/To Language/d' "${CACHE_DIR}"languages_libre.txt > "${CACHE_DIR}"to_language & fi fi;; ?engine=google) if [ -s "${CACHE_DIR}"languages_google.txt ]; then if [ "$(date -r "${CACHE_DIR}"languages_google.txt +%W)" != "$(date +%W)" ]; then get_languages > "${CACHE_DIR}"languages_google.txt fi if [ -p "${CACHE_DIR}"from_language ] && [ -p "${CACHE_DIR}"to_language ]; then sed '/To Language/,$d' "${CACHE_DIR}"languages_google.txt > "${CACHE_DIR}"from_language & sed '/To Language/p; 1,/To Language/d' "${CACHE_DIR}"languages_google.txt > "${CACHE_DIR}"to_language & else mkfifo "${CACHE_DIR}"from_language 2>/dev/null mkfifo "${CACHE_DIR}"to_language 2>/dev/null sed '/To Language/,$d' "${CACHE_DIR}"languages_google.txt > "${CACHE_DIR}"from_language & sed '/To Language/p; 1,/To Language/d' "${CACHE_DIR}"languages_google.txt > "${CACHE_DIR}"to_language & fi else mkdir -p "${CACHE_DIR}" get_languages > "${CACHE_DIR}"languages_google.txt if [ -p "${CACHE_DIR}"from_language ] && [ -p "${CACHE_DIR}"to_language ]; then sed '/To Language/,$d' "${CACHE_DIR}"languages_google.txt > "${CACHE_DIR}"from_language & sed '/To Language/p; 1,/To Language/d' "${CACHE_DIR}"languages_google.txt > "${CACHE_DIR}"to_language & else mkfifo "${CACHE_DIR}"from_language 2>/dev/null mkfifo "${CACHE_DIR}"to_language 2>/dev/null sed '/To Language/,$d' "${CACHE_DIR}"languages_google.txt > "${CACHE_DIR}"from_language & sed '/To Language/p; 1,/To Language/d' "${CACHE_DIR}"languages_google.txt > "${CACHE_DIR}"to_language & fi fi;; esac else if [ -s "${CACHE_DIR}"languages_google.txt ]; then if [ "$(date -r "${CACHE_DIR}"languages_google.txt +%W)" != "$(date +%W)" ]; then get_languages > "${CACHE_DIR}"languages_google.txt fi if [ -p "${CACHE_DIR}"from_language ] && [ -p "${CACHE_DIR}"to_language ]; then sed '/To Language/,$d' "${CACHE_DIR}"languages_google.txt > "${CACHE_DIR}"from_language & sed '/To Language/p; 1,/To Language/d' "${CACHE_DIR}"languages_google.txt > "${CACHE_DIR}"to_language & else mkfifo "${CACHE_DIR}"from_language 2>/dev/null mkfifo "${CACHE_DIR}"to_language 2>/dev/null sed '/To Language/,$d' "${CACHE_DIR}"languages_google.txt > "${CACHE_DIR}"from_language & sed '/To Language/p; 1,/To Language/d' "${CACHE_DIR}"languages_google.txt > "${CACHE_DIR}"to_language & fi else mkdir -p "${CACHE_DIR}" get_languages > "${CACHE_DIR}"languages_google.txt if [ -p "${CACHE_DIR}"from_language ] && [ -p "${CACHE_DIR}"to_language ]; then sed '/To Language/,$d' "${CACHE_DIR}"languages_google.txt > "${CACHE_DIR}"from_language & sed '/To Language/p; 1,/To Language/d' "${CACHE_DIR}"languages_google.txt > "${CACHE_DIR}"to_language & else mkfifo "${CACHE_DIR}"from_language 2>/dev/null mkfifo "${CACHE_DIR}"to_language 2>/dev/null sed '/To Language/,$d' "${CACHE_DIR}"languages_google.txt > "${CACHE_DIR}"from_language & sed '/To Language/p; 1,/To Language/d' "${CACHE_DIR}"languages_google.txt > "${CACHE_DIR}"to_language & fi fi fi } list_languages() { load_languages pr -m -t "${CACHE_DIR}"from_language "${CACHE_DIR}"to_language exit } interactive_mode() { if which fzf >/dev/null 2>&1; then load_languages printf "You will be prompted to enter the language you want to translate from, and then the language you want to translate to. Press Enter to continue." && stty -echo && read junk && \ from_language=$(sed '/From Language/d' "${CACHE_DIR}"from_language | fzf) && \ to_language=$(sed '/To Language/d' "${CACHE_DIR}"to_language | fzf) && \ printf '\nFrom Language: %s\nTo Language: %s\nEnter the text you want to translate: ' "${from_language}" "${to_language}" && stty echo && read -r input else echo "You need to install fzf to use the interactive mode." exit 2 fi } show_help() { echo "Usage: $(basename "$0") ENGINE [-f from_language] [-t to_language] [-i input] Example: $(basename "$0") -L -f English -t French -i \"The fish in the bathtub\" Options: -h Show help -L Use LibreTranslate -G Use Google Translate (default) -f Set the language to translate from This option can be omitted, since by default it will autodetect the language you're translating from. -t Set the language to translate to The default is English. -i Enter the text to be translated. To translate a file, enter