Edited at

外国語の意味と例文を調べる

More than 5 years have passed since last update.

趣味の関係でよく日本語⇔ロシア語の単語の意味と例文を調べることがあるのだが、

分からない単語に出会うたびにchromeを開き、google translateにアクセスしているのでは面倒。

ということで、流行りのjqを使って我らが同志terminalを使って単語の意味と例文を調べられるようなスクリプトを書いてみた。

(jq初デビューのため間違いやアドバイスなどご指摘を歓迎します!)


インストール


まずはjqのインストール


for OSX

macならhomebrewでしょう。

brew install jq


for ubuntu

sudo aptitude install jq


スクリプトを導入

.bashrcなどに以下を追加


translate.bash

function translate(){

local FROM
local TO
if [ $# -eq 1 ]; then
FROM="en"
TO="ja"
elif [ $# -eq 3 ]; then
FROM=$2
TO=$3
else
echo "[usage] translate phrase [from(en) to(ja)]" 1>&2
fi
if
[ "$TO" != "" ]; then
echo "$1 ($FROM->$TO)"
curl -sSX GET "http://glosbe.com/gapi/translate?from=$FROM&dest=$TO&format=json&phrase=$1&pretty=true" | jq -r '[.tuc[]|if .phrase == null then empty else {w:.phrase.text, m:.meanings} end]|reduce .[] as $i ("\n"; . + $i.w + "\n" + reduce $i.m[] as $m (""; . + "\t" + $m.text + "\n"))' 2>/dev/null
fi
}

function transexpl(){
local FROM
local TO
if [ $# -eq 1 ]; then
FROM="en"
TO="ja"
elif [ $# -eq 3 ]; then
FROM=$2
TO=$3
else
echo "[usage] transexpl phrase [from(en) to(ja)]" 1>&2
fi
if
[ "$TO" != "" ]; then
echo "$1 ($FROM->$TO)"
curl -sSX GET "http://glosbe.com/gapi/tm?from=$FROM&dest=$TO&format=json&phrase=$1&pretty=true" | jq -r --arg FROM "$FROM" --arg TO "$TO" 'reduce .examples[] as $e ("";. + $FROM+":\t" + $e.first + "\n"+$TO+":\t" + $e.second + "\n\n")' 2>/dev/null|less
fi
}



使用方法

[usage] translate phrase [from(en) to(ja)] # 単語の意味

[usage] transexpl phrase [from(en) to(ja)] # 例文

のとおり。

翻訳元と翻訳先の言語は省略すると英語→日本語になる。


$ translate pencil

pencil (en->ja)

鉛筆
graphite writing-instrument
A common writing utensil (made of a graphite shaft surrounded by wood) that uses graphite (commonly referred to as lead) to make marks on paper.
えんぴつ
A common writing utensil (made of a graphite shaft surrounded by wood) that uses graphite (commonly referred to as lead) to make marks on paper.
こうせんそく
こうそく
ペン
ペンシル
光束
光線束

$ transexpl 遅刻 ja ru

ja: 彼は遅刻すると思う。
ru: Я думаю, он опоздает.

ja: 上司は私が会議に遅刻したことを許してくれなかった。
ru: Мой начальник не простил меня за то, что я опоздал на совещание.

ja: 今度だけは遅刻を大目に見てやろう。
ru: В этот раз я закрою глаза на ваше опоздание.

ja: 又しても彼女は遅刻した。
ru: Она снова опоздала.

ja: 言うまでもないが、彼はいつものように学校を遅刻した。
ru: Не нужно говорить, что он, как обычно, опоздал в школу.

ja: 彼は遅刻の言い訳をした。
ru: Он извинился за опоздание.

ja: 君は仕事に遅刻したね。
ru: Ты опоздал на работу.

ja: 彼女はよく学校に遅刻した。
ru: Она часто опаздывала в школу.
(続く)

結構便利。