単語の意味が分からなかったり、定形文でコレは何て言ったっけ? など、ちょこっと意味を調べたい場合、いちいち GUI のウェブブラウザを開くのもナンセンス。
そう思って、コマンドラインから Google 翻訳を使って翻訳をしてくれるスクリプトを書いてみました。 タイムスタンプを見ると 2011 年の 11 月 22 日でしたが、今でもちゃんと動いているようです。
ソースコード
#!/usr/bin/env bash
[ $# -ne 2 ] && exit 1;
sl="$1"
tl="$2"
while read line
do
text="$text $line"
done
curl -s -X POST -d "sl=${sl}&tl=${tl}" \
--data-urlencode "text=${text}" \
--user-agent 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)' \
http://translate.google.co.jp/ \
| sed 's/>/>\n/g' \
| awk '/result_box/,/^<\/span>/ { print; }' \
| sed -e 's/<.*>//g' -e '/^$/d' -e "s/'/'/g"
cURL を使って、標準入力を POST して結果を表示するだけです。UA をフルブラウザのものにしないと弾かれてしまうので、Microsoft Internet Explorer 6.0 のものにしています。
googleだったら、ちゃんとしたAPIも公開しているのでしょうが、POST結果を取得したいだけなのに色々面倒な事はしたくないので、シェルスクリプトでガリガリ書きました。
使い方
# 日本語から英語へ
echo '新しい朝が来た。' | ./trans.sh ja en
A new morning has come.
# 日本語からロシア語へ
echo '新しい朝が来た。' | ./trans.sh ja ru
Настало новое утро настало.
# 英語からドイツ語へ
echo 'Hello, This is a test message.' | ./trans.sh en de
Hallo, Dies ist eine Testnachricht.
スクリプトの引数に from と to 言語を指定します。 echo コマンドで指定するのが面倒だったら、単に ./trans.sh en ja
を実行して文を入力後、C-d で EOF してやれば良いと思います。
./trans.sh en ja
There is a pen and a pencil.
ペンと鉛筆があります。
また、当たり前ですが下記のようにファイルに対しても使えます。
cat LICENSE | ./trans.sh en ja
./trans.sh en ja < LICENSE
※ 2020/07/02 度重なるブログ移転・ブログシステムのアップデートにより崩れた記事を校正。