soimort / translate-shell

:speech_balloon: Command-line translator using Google Translate, Bing Translator, Yandex.Translate, etc.
https://www.soimort.org/translate-shell
The Unlicense
7k stars 392 forks source link

Translate Shell

Icon CircleCI Actions Version Download Gitter

Translate Shell (formerly Google Translate CLI) is a command-line translator powered by Google Translate (default), Bing Translator, Yandex.Translate, and Apertium. It gives you easy access to one of these translation engines in your terminal:

$ trans 'Saluton, Mondo!'
Saluton, Mondo!

Hello, World!

Translations of Saluton, Mondo!
[ Esperanto -> English ]
Saluton ,
    Hello,
Mondo !
    World!

By default, translations with detailed explanations are shown. You can also translate the text briefly: (only the most relevant translation will be shown)

$ trans -brief 'Saluton, Mondo!'
Hello, World!

Translate Shell can also be used like an interactive shell; input the text to be translated line by line:

$ trans -shell -brief
> Rien ne réussit comme le succès.
Nothing succeeds like success.
> Was mich nicht umbringt, macht mich stärker.
What does not kill me makes me stronger.
> Юмор есть остроумие глубокого чувства.
Humor has a deep sense of wit.
> 學而不思則罔,思而不學則殆。
Learning without thought is labor lost, thought without learning is perilous.
> 幸福になるためには、人から愛されるのが一番の近道。
In order to be happy, the best way is to be loved by people.

Prerequisites

System Requirements

Translate Shell is known to work on many POSIX-compliant systems, including but not limited to:

Dependencies

Recommended Dependencies

These dependencies are optional, but strongly recommended for full functionality:

Environment and Fonts

It is a must to have corresponding fonts for the language(s) / script(s) you wish to display in your terminal. See wiki: Writing Systems and Fonts for more details on scripts and recommended Unicode fonts.

Try It Out!

Start an interactive shell and translate anything you input into your native language: (in bash or zsh)

$ gawk -f <(curl -Ls --compressed https://git.io/translate) -- -shell

(in fish)

$ gawk -f (curl -Ls --compressed https://git.io/translate | psub) -- -shell

Using Docker

To try out via Docker, run:

$ docker pull soimort/translate-shell

Then you may start an interactive shell from the Docker image for translating:

$ docker run -it soimort/translate-shell -shell

Installation

Option #1. Direct Download

Download the self-contained executable and place it into your path. It's everything you need.

$ wget git.io/trans
$ chmod +x ./trans

There is a GPG signature.

Option #2. From A Package Manager

Using your favorite package manager

See wiki: Distros on how to install from a specific package manager on your distro.

Using Antigen (for Zsh users)

Add the following line to your .zshrc:

antigen bundle soimort/translate-shell@develop

Option #3. From Git

$ git clone https://github.com/soimort/translate-shell
$ cd translate-shell/
$ make
$ [sudo] make install

In case you have only zsh but not bash in your system, build with:

$ make TARGET=zsh

The default PREFIX of installation is /usr/local. To install the program to somewhere else (e.g. /usr, ~/.local), use:

$ [sudo] make PREFIX=/usr install

Getting Started by Examples

Translate a Word

From any language to your language

Google Translate can identify the language of the source text automatically, and Translate Shell by default translates the source text into the language of your locale.

$ trans vorto

From any language to one or more specific languages

Translate a word into French:

$ trans :fr word

Translate a word into Chinese and Japanese: (use a plus sign "+" as the delimiter)

$ trans :zh+ja word

Alternatively, equals sign ("=") can be used in place of the colon (":"). Note that in some shells (e.g. zsh), equals signs may be interpreted differently, therefore the argument specifying languages needs to be protected:

$ trans {=zh+ja} word
$ trans '=zh+ja' word

You can also use the -target (-t) option to specify the target language(s):

$ trans -t zh+ja word

With the -t option, the name of the language may also be used instead of the language code:

$ trans -t japanese word
$ trans -t 日本語 word

From a specific language

Google Translate may wrongly identify the source text as some other language than you expected:

$ trans 手紙

In that case, you need to specify its language explicitly:

$ trans ja: 手紙
$ trans zh: 手紙

You can also use the -source (-s) option to specify the source language:

$ trans -s ja 手紙

Translate Multiple Words or a Phrase

Translate each word alone:

$ trans en:zh word processor

Put words into one argument, and translate them as a whole:

$ trans en:zh "word processor"

Translate a Sentence

Translating a sentence is much the same like translating a phrase; you can just quote the sentence into one argument:

$ trans :zh "To-morrow, and to-morrow, and to-morrow,"
$ trans :zh 'To-morrow, and to-morrow, and to-morrow,'

It is also possible to translate multi-line sentences:

$ trans :zh "Creeps in this petty pace from day to day,
> To the last syllable of recorded time;
> And all our yesterdays have lighted fools
> The way to dusty death."

To avoid punctuation marks (e.g. "!") or other special characters being interpreted by the shell, use single quotes:

$ trans :zh 'Out, out, brief candle!'

There are some cases though, you may still want to use double quotes: (e.g. the sentence contains a single quotation mark "'")

$ trans :zh "Life's but a walking shadow, a poor player"

Alternatively, use the -join-sentence (-j) option to treat all arguments as one sentence so that quotes can be omitted:

$ trans -j :zh Life\'s but a walking shadow, a poor player

Brief Mode

By default, Translate Shell displays translations in a verbose manner. If you prefer to see only the most relevant translation, there is a brief mode available using the -brief (-b) option:

$ trans -b :fr "Saluton, Mondo"

In brief mode, phonetic notation (if any) is not shown by default. To enable this, put an at sign "@" in front of the language code:

$ trans -b :@ja "Saluton, Mondo"

Dictionary Mode

Google Translate can be used as a dictionary. When translating a word and the target language is the same as the source language, the dictionary entry of the word is shown:

$ trans :en word

To enable dictionary mode no matter whether the source language and the target language are identical, use the -dictionary (-d) option.

$ trans -d fr: mot

Note: Not every language supported by Google Translate has provided dictionary data. See wiki: Languages to find out which language(s) has dictionary support.

Language Identification

Use the -identify (-id) option to identify the language of the text:

$ trans -id 言葉

Text-to-Speech

Use the -play (-p) option to listen to the translation:

$ trans -b -p :ja "Saluton, Mondo"

Use the -speak (-sp) option to listen to the original text:

$ trans -sp "你好,世界"

Terminal Paging

Sometimes the content of translation can be too much for display in one screen. Use the -view (-v) option to view the translation in a terminal pager such as less or more:

$ trans -d -v word

Right-to-Left (RTL) Languages

Right-to-Left (RTL) languages are well supported via GNU FriBidi.

The program will automatically adjust the screen width for padding when displaying right-to-left languages. Alternatively, you may use the -width (-w) option to specify the screen width:

$ trans -b -w 40 :he "Saluton, Mondo"

See wiki: Languages to find out which language(s) uses a Right-to-Left writing system.

Pipeline, Input and Output

If no source text is given in command-line arguments, the program will read from standard input, or from the file specified by the -input (-i) option:

$ echo "Saluton, Mondo" | trans -b :fr
$ trans -b -i input.txt :fr

Translations are written to standard output, or to the file specified by the -output (-o) option:

$ echo "Saluton, Mondo" | trans -b -o output.txt :fr

Translate a File

Instead of using the -input option, a file URI scheme (file:// followed by the file name) can be used as a command-line argument:

$ trans :fr file://input.txt

Note: Brief mode is used when translating from file URI schemes.

Translate a Web Page

To translate a web page, an http(s) URI scheme can be used as an argument:

$ trans :fr http://www.w3.org/

A browser session will open for viewing the translation (via Google Translate's web interface). To specify your web browser of choice, use the -browser option:

$ trans -browser firefox :fr http://www.w3.org/

Language Details

Use the -linguist (-L) option to view details of one or more languages:

$ trans -L fr
$ trans -L de+en

Some basic information of the language will be displayed: its English name and endonym (language name in the language itself), language family, writing system, canonical Google Translate code and ISO 639-3 code.

Interactive Translate Shell (REPL)

Start an interactive shell using the -shell (or -interactive, -I) option:

$ trans -shell

You may specify the source language and the target language(s) before starting an interactive shell:

$ trans -shell en:fr

You may also change these settings during an interactive session. See wiki: REPL for more advanced usage of the interactive Translate Shell.

Usage

For more details on command-line options, see the man page trans(1) or use trans -M in a terminal.

Usage:  trans [OPTIONS] [SOURCES]:[TARGETS] [TEXT]...

Information options:
    -V, -version
        Print version and exit.
    -H, -help
        Print help message and exit.
    -M, -man
        Show man page and exit.
    -T, -reference
        Print reference table of languages (in endonyms) and codes, and exit.
    -R, -reference-english
        Print reference table of languages (in English names) and codes, and exit.
    -S, -list-engines
        List available translation engines and exit.
    -list-languages
        List all languages (in endonyms) and exit.
    -list-languages-english
        List all languages (in English names) and exit.
    -list-codes
        List all codes and exit.
    -list-all
        List all languages (endonyms and English names) and codes, and exit.
    -L CODES, -linguist CODES
        Print details of languages and exit.
    -U, -upgrade
        Check for upgrade of this program.

Translator options:
    -e ENGINE, -engine ENGINE
        Specify the translation engine to use.

Display options:
    -verbose
        Verbose mode. (default)
    -b, -brief
        Brief mode.
    -d, -dictionary
        Dictionary mode.
    -identify
        Language identification.
    -show-original Y/n
        Show original text or not.
    -show-original-phonetics Y/n
        Show phonetic notation of original text or not.
    -show-translation Y/n
        Show translation or not.
    -show-translation-phonetics Y/n
        Show phonetic notation of translation or not.
    -show-prompt-message Y/n
        Show prompt message or not.
    -show-languages Y/n
        Show source and target languages or not.
    -show-original-dictionary y/N
        Show dictionary entry of original text or not.
    -show-dictionary Y/n
        Show dictionary entry of translation or not.
    -show-alternatives Y/n
        Show alternative translations or not.
    -w NUM, -width NUM
        Specify the screen width for padding.
    -indent NUM
        Specify the size of indent (number of spaces).
    -theme FILENAME
        Specify the theme to use.
    -no-theme
        Do not use any other theme than default.
    -no-ansi
        Do not use ANSI escape codes.
    -no-autocorrect
        Do not autocorrect. (if defaulted by the translation engine)
    -no-bidi
        Do not convert bidirectional texts.
    -bidi
        Always convert bidirectional texts.
    -no-warn
        Do not write warning messages to stderr.
    -dump
        Print raw API response instead.

Audio options:
    -p, -play
        Listen to the translation.
    -speak
        Listen to the original text.
    -n VOICE, -narrator VOICE
        Specify the narrator, and listen to the translation.
    -player PROGRAM
        Specify the audio player to use, and listen to the translation.
    -no-play
        Do not listen to the translation.
    -no-translate
        Do not translate anything when using -speak.
    -download-audio
        Download the audio to the current directory.
    -download-audio-as FILENAME
        Download the audio to the specified file.

Terminal paging and browsing options:
    -v, -view
        View the translation in a terminal pager.
    -pager PROGRAM
        Specify the terminal pager to use, and view the translation.
    -no-view, -no-pager
        Do not view the translation in a terminal pager.
    -browser PROGRAM
        Specify the web browser to use.
    -no-browser
        Do not open the web browser.

Networking options:
    -x HOST:PORT, -proxy HOST:PORT
        Use HTTP proxy on given port.
    -u STRING, -user-agent STRING
        Specify the User-Agent to identify as.
    -4, -ipv4, -inet4-only
        Connect only to IPv4 addresses.
    -6, -ipv6, -inet6-only
        Connect only to IPv6 addresses.

Interactive shell options:
    -I, -interactive, -shell
        Start an interactive shell.
    -E, -emacs
        Start the GNU Emacs front-end for an interactive shell.
    -no-rlwrap
        Do not invoke rlwrap when starting an interactive shell.

I/O options:
    -i FILENAME, -input FILENAME
        Specify the input file.
    -o FILENAME, -output FILENAME
        Specify the output file.

Language preference options:
    -hl CODE, -host CODE
        Specify the host (interface) language.
    -s CODES, -sl CODES, -source CODES, -from CODES
        Specify the source language(s), joined by '+'.
    -t CODES, -tl CODES, -target CODES, -to CODES
        Specify the target language(s), joined by '+'.

Text preprocessing options:
    -j, -join-sentence
        Treat all arguments as one single sentence.

Other options:
    -no-init
        Do not load any initialization script.

See the man page trans(1) for more information.

Code List

Use trans -R or trans -T to view the reference table in a terminal.

For more details on languages and corresponding codes, see wiki: Languages.

Language Code Language Code Language Code
Afrikaans
Afrikaans
af Hebrew
עִבְרִית
he Portuguese (Brazilian)
Português Brasileiro
pt-BR
Albanian
Shqip
sq Hill Mari
Кырык мары
mrj Portuguese (European)
Português Europeu
pt-PT
Amharic
አማርኛ
am Hindi
हिन्दी
hi Punjabi
ਪੰਜਾਬੀ
pa
Arabic
العربية
ar Hmong
Hmoob
hmn Quechua
Runasimi
qu
Armenian
Հայերեն
hy Hungarian
Magyar
hu Querétaro Otomi
Hñąñho
otq
Assamese
অসমীয়া
as Icelandic
Íslenska
is Romanian
Română
ro
Aymara
Aymar aru
ay Igbo
Igbo
ig Romansh
Rumantsch
rm
Azerbaijani
Azərbaycanca
az Ilocano
Ilokano
ilo Russian
Русский
ru
Bambara
Bamanankan
bm Indonesian
Bahasa Indonesia
id Samoan
Gagana Sāmoa
sm
Bashkir
Башҡортса
ba Interlingue
Interlingue
ie Sanskrit
संस्कृतम्
sa
Basque
Euskara
eu Inuinnaqtun
Inuinnaqtun
ikt Scots Gaelic
Gàidhlig
gd
Belarusian
беларуская
be Inuktitut
ᐃᓄᒃᑎᑐᑦ
iu Sepedi
Sepedi
nso
Bengali
বাংলা
bn Inuktitut (Latin)
Inuktitut
iu-Latn Serbian (Cyrillic)
Српски
sr-Cyrl
Bhojpuri
भोजपुरी
bho Irish
Gaeilge
ga Serbian (Latin)
Srpski
sr-Latn
Bosnian
Bosanski
bs Italian
Italiano
it Sesotho
Sesotho
st
Breton
Brezhoneg
br Japanese
日本語
ja Setswana
Setswana
tn
Bulgarian
български
bg Javanese
Basa Jawa
jv Shona
chiShona
sn
Cantonese
粵語
yue Kannada
ಕನ್ನಡ
kn Sindhi
سنڌي
sd
Catalan
Català
ca Kazakh
Қазақ тілі
kk Sinhala
සිංහල
si
Cebuano
Cebuano
ceb Khmer
ភាសាខ្មែរ
km Slovak
Slovenčina
sk
Cherokee
ᏣᎳᎩ
chr Kinyarwanda
Ikinyarwanda
rw Slovenian
Slovenščina
sl
Chichewa
Nyanja
ny Klingon
tlhIngan Hol
tlh-Latn Somali
Soomaali
so
Chinese (Literary)
文言
lzh Konkani
कोंकणी
gom Spanish
Español
es
Chinese (Simplified)
简体中文
zh-CN Korean
한국어
ko Sundanese
Basa Sunda
su
Chinese (Traditional)
繁體中文
zh-TW Krio
Krio
kri Swahili
Kiswahili
sw
Chuvash
Чӑвашла
cv Kurdish (Central)
سۆرانی
ckb Swedish
Svenska
sv
Corsican
Corsu
co Kurdish (Northern)
Kurmancî
ku Tahitian
Reo Tahiti
ty
Croatian
Hrvatski
hr Kyrgyz
Кыргызча
ky Tajik
Тоҷикӣ
tg
Czech
Čeština
cs Lao
ລາວ
lo Tamil
தமிழ்
ta
Danish
Dansk
da Latin
Latina
la Tatar
татарча
tt
Dari
دری
prs Latvian
Latviešu
lv Telugu
తెలుగు
te
Dhivehi
ދިވެހި
dv Lingala
Lingála
ln Thai
ไทย
th
Dogri
डोगरी
doi Lithuanian
Lietuvių
lt Tibetan
བོད་ཡིག
bo
Dutch
Nederlands
nl Luganda
Luganda
lg Tigrinya
ትግርኛ
ti
Dzongkha
རྫོང་ཁ
dz Luxembourgish
Lëtzebuergesch
lb Tongan
Lea faka-Tonga
to
Eastern Mari
Олык марий
mhr Macedonian
Македонски
mk Tsonga
Xitsonga
ts
English
English
en Maithili
मैथिली
mai Turkish
Türkçe
tr
Esperanto
Esperanto
eo Malagasy
Malagasy
mg Turkmen
Türkmen
tk
Estonian
Eesti
et Malay
Bahasa Melayu
ms Twi
Twi
tw
Ewe
Eʋegbe
ee Malayalam
മലയാളം
ml Udmurt
Удмурт
udm
Faroese
Føroyskt
fo Maltese
Malti
mt Ukrainian
Українська
uk
Fijian
Vosa Vakaviti
fj Maori
Māori
mi Upper Sorbian
Hornjoserbšćina
hsb
Filipino
Filipino
tl Marathi
मराठी
mr Urdu
اُردُو
ur
Finnish
Suomi
fi Meiteilon
ꯃꯤꯇꯩꯂꯣꯟ
mni-Mtei Uyghur
ئۇيغۇر تىلى
ug
French
Français
fr Mizo
Mizo ṭawng
lus Uzbek
Oʻzbek tili
uz
French (Canadian)
Français canadien
fr-CA Mongolian
Монгол
mn Vietnamese
Tiếng Việt
vi
Frisian
Frysk
fy Mongolian (Traditional)
ᠮᠣᠩᠭᠣᠯ
mn-Mong Volapük
Volapük
vo
Galician
Galego
gl Myanmar
မြန်မာစာ
my Welsh
Cymraeg
cy
Georgian
ქართული
ka Nepali
नेपाली
ne Wolof
Wollof
wo
German
Deutsch
de Norwegian
Norsk
no Xhosa
isiXhosa
xh
Greek
Ελληνικά
el Occitan
Occitan
oc Yakut
Sakha
sah
Greenlandic
Kalaallisut
kl Odia
ଓଡ଼ିଆ
or Yiddish
ייִדיש
yi
Guarani
Avañe'ẽ
gn Oromo
Afaan Oromoo
om Yoruba
Yorùbá
yo
Gujarati
ગુજરાતી
gu Papiamento
Papiamentu
pap Yucatec Maya
Màaya T'àan
yua
Haitian Creole
Kreyòl Ayisyen
ht Pashto
پښتو
ps Zulu
isiZulu
zu
Hausa
Hausa
ha Persian
فارسی
fa
Hawaiian
ʻŌlelo Hawaiʻi
haw Polish
Polski
pl

Wiki

Lists of all languages, writing systems and fonts for reference:

The following pages demonstrate the advanced usage of Translate Shell:

Find out whether your Linux distribution has included Translate Shell in its official repository. If not, contribute one:

Frequently Asked Questions, historical stuff, AWK coding style, etc.:

Reporting Bugs / Contributing

Please review the guidelines for contributing before reporting an issue or sending a pull request.

Licensing

This is free and unencumbered software released into the public domain. See LICENSE and WAIVER for details.