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.
Translate Shell is known to work on many POSIX-compliant systems, including but not limited to:
- GNU/Linux
- macOS
- *BSD
- Android (through Termux)
- Windows (through WSL, Cygwin, or MSYS2)
- GNU Awk (gawk) 4.0 or later
- This program relies heavily on GNU extensions of the AWK language, which are non-portable for other AWK implementations (e.g. nawk).
- How to get gawk:
- gawk comes with all GNU/Linux distributions.
- On FreeBSD, gawk is available in the ports.
- On macOS, gawk is available in MacPorts and Homebrew.
- Please note that gawk 5.2.0 has a known bug -- update to gawk 5.2.1 instead.
- GNU Bash or Zsh
- You may use Translate Shell from any Unix shell of your choice (bash, zsh, ksh, tcsh, fish, etc.); however, the wrapper script requires either bash or zsh installed.
These dependencies are optional, but strongly recommended for full functionality:
- curl with OpenSSL support
- GNU FriBidi: an implementation of the Unicode Bidirectional Algorithm (bidi)
- required for displaying text in Right-to-Left scripts (e.g. Arabic, Hebrew)
- mplayer, mpv, mpg123, or eSpeak
- required for the Text-to-Speech functionality
- less, more or most
- required for terminal paging
- rlwrap: a GNU readline wrapper
- required for readline-style editing and history in the interactive shell
- aspell or hunspell
- required for spell checking
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.
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
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
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.
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
$ 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
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
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
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 each word alone:
$ trans en:zh word processor
Put words into one argument, and translate them as a whole:
$ trans en:zh "word processor"
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
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"
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.
Use the -identify
(-id
) option to identify the language of the text:
$ trans -id 言葉
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 "你好,世界"
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 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.
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
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.
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/
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.
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.
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.
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 |
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.:
Please review the guidelines for contributing before reporting an issue or sending a pull request.
This is free and unencumbered software released into the public domain. See LICENSE and WAIVER for details.