#! /usr/bin/env bash # Copyright (C) 2007 Juan Manuel Borges Cao # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA TW="$(basename $0)" TW_AUTHOR="Juan Manuel Borges Cao" TW_DESCRIPTION="Translates words in different languages." TW_BUGREPORT="juanmabc3@gmail.com" TW_DATADIR="/usr/share/tw" function tw_info { echo "Try \`$TW --help' for more information." } function tw_error { echo "$TW: $@"; tw_info; exit 1 } function tw_usage { printf "Usage: $TW [OPTION] dictionary term\n" printf "$TW_DESCRIPTION\n" printf "\n" printf "Mandatory arguments for long options are mandatory for short options too.\n" printf " -l, --list\t\t\tlist available dictionaries\n" printf " -h, --help\t\t\tshows a help message\n" printf " -v, --version\t\t\tshows the program version\n" printf "\n" printf "Report bugs to <$TW_BUGREPORT>.\n" exit 0 } function tw_version { printf "0.1.0\n" exit 0 } function tw_twd { TW_DICTIONARY="$1" TW_TERM="$2" if [[ -f "$TW_DICTIONARY" ]] then TW_PMATCH=$(grep -iw "$TW_TERM" "$TW_DICTIONARY") if grep -qiw "$TW_TERM" <(gawk -F" : " '{ print $1 }' <<< "$TW_PMATCH") then echo "$TW_PMATCH" fi exit 0 else tw_error "$TW_DICTIONARY: file not found" fi } function tw_sakhr() { OUTPUT=$(curl -s "http://dictionary.sakhr.com/idrisidic_2MM.asp?Lang=E-A&Sub=$1" | iconv -f MS-ARAB -t utf-8); awk 'printnext { print $0; printnext=0 } /splitString\("'$1'","En"\)/ { printnext=1 } /splitString\(".*","En.*"\)/ { print $0 }' <<< "$OUTPUT" | sed -e 's/.*splitString("\(.*\)","En.*").*/\1/g' -e 's/.*splitString("\(.*\)/\1/g'; } function tw_freetranslation { case "${1##*.}" in "en-es") TW_LANGUAGE="English/Spanish";; "es-en") TW_LANGUAGE="Spanish/English";; "en-fr") TW_LANGUAGE="English/French";; "fr-en") TW_LANGUAGE="French/English";; "en-de") TW_LANGUAGE="English/German";; "de-en") TW_LANGUAGE="German/English";; "en-it") TW_LANGUAGE="English/Italian";; "it-en") TW_LANGUAGE="Italian/English";; "en-nl") TW_LANGUAGE="English/Dutch";; "nl-en") TW_LANGUAGE="Dutch/English";; "en-pt") TW_LANGUAGE="English/Portuguese";; "pt-en") TW_LANGUAGE="Portuguese/English";; # "en-ru") TW_LANGUAGE="English/Russian";; # "ru-en") TW_LANGUAGE="Russian/English";; "en-no") TW_LANGUAGE="English/Norwegian";; # "en-jp") TW_LANGUAGE="English/Japanese";; # "jp-en") TW_LANGUAGE="Japanese/English";; # "en-zh") TW_LANGUAGE="English/SimplifiedChinese";; # "en-zt") TW_LANGUAGE="English/TraditionalChinese";; esac TW_TERM=$(iconv -f "UTF-8" -t "ISO-8859-15" <<< "$2") curl -s -d "srctext=${TW_TERM}" -d "language=${TW_LANGUAGE}" \ -d "sequence=core" http://ets.freetranslation.com | \ iconv -f "ISO-8859-15" -t "UTF-8" printf "\n" } function tw_ls_dictionaries_freetranslation { printf "www.freetranslation.com.de-en\n" printf "www.freetranslation.com.en-de\n" printf "www.freetranslation.com.en-es\n" printf "www.freetranslation.com.en-fr\n" printf "www.freetranslation.com.en-it\n" # printf "www.freetranslation.com.en-jp\n" printf "www.freetranslation.com.en-nl\n" printf "www.freetranslation.com.en-no\n" printf "www.freetranslation.com.en-pt\n" # printf "www.freetranslation.com.en-ru\n" printf "www.freetranslation.com.es-en\n" printf "www.freetranslation.com.fr-en\n" printf "www.freetranslation.com.it-en\n" # printf "www.freetranslation.com.jp-en\n" printf "www.freetranslation.com.nl-en\n" printf "www.freetranslation.com.pt-en\n" # printf "www.freetranslation.com.ru-en\n" # printf "www.freetranslation.com.zh-en\n" # printf "www.freetranslation.com.zt-en\n" } function tw_google_language_tools { case "${1##*.}" in "zh_zt") TW_LANGUAGE="zh-CN|zh-TW";; "zt_zh") TW_LANGUAGE="zh_TW|zh-CN";; "en_zh") TW_LANGUAGE="en|zh-CN";; "en_zt") TW_LANGUAGE="en|zh_TW";; *) TW_LANGUAGE=$(printf ${1##*.} | tr '-' '|');; esac TW_TERM="$2" curl -s -A "Mozilla/5.0" -d "hl=en" -d "ie=UTF8" -d "text=${TW_TERM}" \ -d "langpair=${TW_LANGUAGE}" http://translate.google.com/translate_t | \ grep "gtrans" | gawk -F"gtrans" '{print $2}' | cut -d'"' -f2 } function tw_ls_dictionaries_google_language_tools { printf "translate.google.com.ar-en\n" printf "translate.google.com.de-en\n" printf "translate.google.com.de-fr\n" printf "translate.google.com.en-ar\n" printf "translate.google.com.en-de\n" printf "translate.google.com.en-es\n" printf "translate.google.com.en-it\n" printf "translate.google.com.en-ja\n" printf "translate.google.com.en-ko\n" printf "translate.google.com.en-pt\n" printf "translate.google.com.en-ru\n" printf "translate.google.com.en-zh\n" printf "translate.google.com.en-zt\n" printf "translate.google.com.es-en\n" printf "translate.google.com.fr-de\n" printf "translate.google.com.fr-en\n" printf "translate.google.com.it-en\n" printf "translate.google.com.ja-en\n" printf "translate.google.com.ko-en\n" printf "translate.google.com.pt-en\n" printf "translate.google.com.pt-en\n" printf "translate.google.com.ru-en\n" printf "translate.google.com.zh-en\n" printf "translate.google.com.zh-zt\n" printf "translate.google.com.zt-zh\n" } function tw_ls_dictionaries_sakhr { printf "dictionary.sakhr.com.en-ar\n" printf "dictionary.sakhr.com.ar-en\n" } function tw_ls_dictionaries { for f in ${TW_DATADIR}/*.twd do printf "$(basename $f .twd)\n" done tw_ls_dictionaries_sakhr tw_ls_dictionaries_google_language_tools tw_ls_dictionaries_freetranslation exit 0 } TEMP=$(getopt -o "lhv" \ -l "list,help,version" -n "$TW" -- "$@") eval set -- "$TEMP" while [[ ! -z "$1" ]] do case "$1" in "-l" | "--list") tw_ls_dictionaries; shift;; "-h" | "--help") tw_usage; shift;; "-v" | "--version") tw_version; shift;; --) shift; break;; *) printf "Internal error!\n"; exit 1;; esac done if [[ -z $1 ]] then tw_error "unknown action" fi case "${1%.*}" in "www.freetranslation.com") tw_freetranslation "$1" "$2";; "translate.google.com") tw_google_language_tools "$1" "$2";; *) tw_twd "${TW_DATADIR}/${1}.twd" "$2";; esac